我正在尝试Apache Tomcat Websocket Implementation。问题是,连接总是在最多30秒的空闲时间后关闭。
我是否需要配置Tomcat以保持连接打开? 如果是这样我怎么能这样做? 我尝试在server.xml的Connector元素中为HTTP协议设置connectionTimeout。这没有任何效果,但我不知道它是否只是不起作用,因为我没有将协议属性调整为特定于websocket的东西(因为我不知道协议声明是什么样的)。
或者它可能是客户端问题。
感谢您的帮助 利奥
编辑:此问题已通过Tomcat 7.0.28(Bug Description,changelog)
解决答案 0 :(得分:4)
Tomcat有several issues和WebSocket,其中一个是它在20秒后关闭连接(这是server.xml中的connectTimeout值)。增加该值以解决问题。
- Jeanfrancois
答案 1 :(得分:4)
我设法让websocket无限开放。您需要做的就是将Apache的connectionTimeout
中的server.xml
设置为减1(connectionTimeout="-1"
)。这解决了我的问题。 :)
参考:
答案 2 :(得分:1)
如果您需要保持连接打开,请ping客户端/服务器。这是可靠地确保连接结束时存在某些内容的唯一方法。
互联网不是一种可靠的传输方式,因此值得确保您的代码可以处理断开连接。
答案 3 :(得分:0)
SET IN SERVER.XML
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="999999"
redirectPort="8443" />
答案 4 :(得分:0)
除了server.xml中的connectionTimeout设置之外,另一个原因可能是你的websocket消息实现类。 getReadTimeout方法是一个用于设置websocket超时的方法,以毫秒为单位。例如,如果要设置套接字超时2分钟(2 * 60 * 1000),则可以使用下面的代码。 注意:您可以通过返回-1来设置无限超时(始终打开)。
@Override
public int getReadTimeout() {
return 2*60*1000;
}
要完整实施,请参阅我的答案中的示例代码。 tomcat websocket servlet listening port