4

我使用 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 使用 keep-alive 功能?

我正在使用的版本:

<dependency>
  <groupId>net.databinder.dispatch</groupId>
  <artifactId>dispatch-core_2.10</artifactId>
  <version>0.9.5</version>
</dependency>
4

0 回答 0