我正在启动嵌入式Jetty服务器并使用SelectChannelConnector。由于遗留原因,我必须使用Jetty 6。
我无法正确模拟服务器端的连接。在将connector.setMaxIdleTime设置为大约20 ms的非常低的值时,它仍然不会失败。
在客户端,我正在从Jetty服务器读取数据流。
注意如果我将setMaxIdleTime值设置为大约10ms。连接正确关闭,我从服务器得到“意外的EOF”,但是当客户端解析http头时会发生这种情况。我想要做的是在我阅读实际内容时模拟相同的行为。
答案 0 :(得分:0)
由于遗留原因,最好的方法是编写自己的连接器来实现它。 (即使仍然依赖Jetty 6的项目,例如GWT / GAE,也已经做到了。遗憾的是,这些自定义连接器都不是开源的)
在Jetty 6上,maxIdleTime实际上只是转换为Socket.setSoTimeout(int)
,它实际上只适用于阻止行为。对于Jetty 7,以及对异步所有内容的关注,该定义发生了很大变化,以至于maxIdleTime作为可配置甚至被重命名以代表新的现实。请参阅Stackoverflow问题的过去答案:When does maxIdleTime trigger?
小心: Jetty 6在2010年是EOL,由于漏洞不固定,在开放式互联网上不再适合或安全使用。甚至没有把它放在负载均衡器,代理,nginx或apache httpd将有所帮助。 (可以在高度受控和有限的环境中使用。)
至少升级到Jetty 7,它具有相同的servlet版本,与Jetty 6相同的JVM要求,以及空闲超时支持和wont be EOL till the end of 2014。