强制嵌入式Jetty立即断开连接

时间:2015-04-24 09:59:43

标签: java sockets tcp network-programming jetty

我正在创建一个接收大量HTTP请求的小实用程序。它写在java中,并使用embedded-jetty通过https处理请求。

我有一个负载测试工具,但是当它运行一段时间后它开始抛出异常:

java.net.BindException: Address already in use: connect

(请注意,这是在发件人方面,而不是在我的项目中)

据我所知,这意味着当另一个connect被调用时,系统中找不到更多的免费套接字。吞吐量大约为每秒1000个请求,并且在2000050000个请求之后的某个位置开始显示失败。

然而,当我使用相同的负载测试工具与另一个程序(一种简单的使用者,由scala使用netty由某个同事编写)时,它只接收所有请求并返回空{{1响应) - 套接字没有问题(虽然典型速度慢ok倍)。

我想知道是否可以通过告诉Jetty以某种方式在响应发送后立即关闭连接来解决这个问题。无论如何,每个新请求都是通过新连接发送的。我尝试使用Connector#setIdleTimeout - 默认情况下似乎是30000,但没有成功。

我该怎么做才能解决这个问题 - 或者至少要更深入地研究这个问题以找到原因(如果我的建议有误)?

UPD 感谢您的建议,我想我不允许发布消息来源,但我知道我应该研究客户端的代码(这会让我忙一段时间因为它是用scala写的。)

1 个答案:

答案 0 :(得分:0)

我发现客户端确实存在问题 - 它会在标头中发送带Connection: Keep-Alive的请求,但会为每个请求创建新的HttpURLConnection并在其后调用disconnect()方法。

要在服务器端解决这个问题,在响应头中发送Connection: close就足够了,因为我没有允许更改测试实用程序。