我使用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
如果我连续多次调用网络服务器(但不是并行),我收到错误:
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是否真的使用了keep-alive功能(因此,重用相同的套接字),或者每次都创建一个新的? 如何修改前面的示例以告诉net.databinder.dispatch使用保持活动功能?
我正在使用的版本:
<dependency>
<groupId>net.databinder.dispatch</groupId>
<artifactId>dispatch-core_2.10</artifactId>
<version>0.9.5</version>
</dependency>