net.databinder.dispatch を使用して、これで Web サーバーを呼び出します。
import dispatch._
def request(in: String, address: java.net.URI, headers: Map[String, String]): String = {
val req = url(address.toString) << in <:< headers
val s = Http(req OK as.String)
s()
}
クライアントは次を定義します。
Connection: keep-alive
サーバーは以下を定義します。
Keep-Alive: timeout=120, max=256
Web サーバーを何度も連続して呼び出すと (ただし、並列ではありません)、エラーが発生します。
Exception in thread "main" java.util.concurrent.ExecutionException: dispatch.StatusCode: Unexpected response status: 500
at com.ning.http.client.providers.netty.NettyResponseFuture.abort(NettyResponseFuture.java:297)
19:32:46.474 [New I/O worker #10] DEBUG c.n.h.c.p.n.NettyAsyncHttpProvider - Unexpected response status: 500
at com.ning.http.client.providers.netty.NettyAsyncHttpProvider.abort(NettyAsyncHttpProvider.java:1326)
dispatch.StatusCode: Unexpected response status: 500
at com.ning.http.client.providers.netty.NettyAsyncHttpProvider.access$700(NettyAsyncHttpProvider.java:137)
このエラーは、接続を閉じる他の Web サーバーでは発生しません。
ここで何が問題なのですか?ウェブサーバー?クライアント?
net.databinder.dispatch は本当にキープアライブ機能を使用しているのでしょうか (つまり、同じソケットを再利用しています)、それとも毎回新しいソケットを作成していますか? 前の例を変更して、net.databinder.dispatch にキープアライブ機能を使用するように指示するにはどうすればよいですか?
私が使用しているバージョン:
<dependency>
<groupId>net.databinder.dispatch</groupId>
<artifactId>dispatch-core_2.10</artifactId>
<version>0.9.5</version>
</dependency>