0

我正在启动一个嵌入式 Jetty 服务器并为此使用 SelectChannelConnector。由于遗留原因,我必须使用 Jetty 6。

我无法正确模拟从服务器端关闭的连接。在将 connector.setMaxIdleTime 设置为 20 毫秒左右的非常低的值时,它仍然没有失败。

在客户端,我正在从 Jetty 服务器读取数据流。

注意如果我将 setMaxIdleTime 值设置为 10 毫秒左右。连接已正确关闭,并且我收到“来自服务器的意外 EOF”,但是当客户端解析 http 标头时会发生这种情况。我想要做的是在阅读实际内容时模拟相同的行为。

4

1 回答 1

0

由于遗留原因,最好的方法是编写自己的连接器来实​​现它。(即使是仍然依赖 Jetty 6 的项目,例如 GWT/GAE,也已经这样做了。遗憾的是,这些自定义连接器都不是开源的)

在 Jetty 6 上, maxIdleTime 真的只是转换为Socket.setSoTimeout(int),它真的只适用于阻塞行为。对于 Jetty 7,以及对异步一切的关注,该定义发生了很大变化,以至于 maxIdleTime 作为可配置项甚至被重命名以代表新的现实。查看过去对 Stackoverflow 问题的回答:maxIdleTime 何时触发?

注意: Jetty 6 于 2010 年停产,由于未修复的漏洞,不再适合或安全地在开放互联网上使用。甚至将它放在负载均衡器、代理、nginx 或 apache httpd 后面都会有所帮助。(可以在高度控制和有限的环境中使用)。

至少升级到 Jetty 7,它具有与 Jetty 6 相同的 servlet 修订版、相同的 JVM 要求,以及空闲超时支持,并且直到 2014 年底都不会 EOL

于 2014-10-11T03:27:26.410 回答