2017-12-24 10 views
0

https://github.com/vert-x/vertx-examples/blob/master/src/raw/java/proxy/ProxyServer.javaと同様のVertxおよびVertxクライアントを使用して、ルータを使用してプロキシを実装しようとしています。VertX Proxyパフォーマンス

例外は、1つではなく複数のサーバーに接続することです。

私は

  1. シンプルなエコーサービス
  2. 私はプロキシの共有HttpClientを使用する場合は、バック

をエコーする前に5秒間スリープサービスへの接続サービスの2種類があります私は単純なエコーサービスに接続します。大きなレイテンシーの問題はありません。中間値は1秒未満ですが、スリープしているサービスに接続すると、待ち時間が時間と負荷によって高くなります。

サービスに直接アクセスすると、予想される待ち時間が平均で5100msになる

リクエストごとに新しいHttpClientを作成するように変更すると、約5110msの良好な待ち時間が得られます。しかし、私がエコー版を打つためにそれを使用すると、砲撃アプリは私にEADDRINUSEエラーを与えます(それは通常listen側にあるので奇妙です)。

私はHTTP SSL上にないので、私は単一の接続の多重化を試していません

私はプロキシ用に控えめな64MBのヒープサイズも使用しています。

新しいHttpClientを作成するのがより適切なのでしょうか?おそらく、不自然な負荷で不十分なマシンでテストしているのかもしれません。この問題を回避するには

答えて

0

は、私はそれが応答

final HttpClientRequest clientRequest = httpClient 
     .request(contextRequest.method(), clientRequestOptions, clientResponse -> { 
      contextRequest.response().setChunked(clientResponse.getHeader(HttpHeaders.CONTENT_LENGTH) == null) 
       .setStatusCode(clientResponse.statusCode()); 
      clientResponse.headers().forEach(e -> contextRequest.response().putHeader(e.getKey(), e.getValue())); 
      clientResponse.endHandler(v -> { 
       contextRequest.response().end(); 
      }); 
      // back pressure here 
      Pump.pump(clientResponse, contextRequest.response()).start(); 
     }).exceptionHandler(context::fail) 
を取得しようとすると、クライアント上で back-pressure patternを適用しなければならなかった