我是否需要告诉Apache Tomcat保持Websocket连接打开?

时间:2012-05-08 09:01:26

标签: tomcat websocket

我正在尝试Apache Tomcat Websocket Implementation。问题是,连接总是在最多30秒的空闲时间后关闭。

我是否需要配置Tomcat以保持连接打开? 如果是这样我怎么能这样做? 我尝试在server.xml的Connector元素中为HTTP协议设置connectionTimeout。这没有任何效果,但我不知道它是否只是不起作用,因为我没有将协议属性调整为特定于websocket的东西(因为我不知道协议声明是什么样的)。

或者它可能是客户端问题。

感谢您的帮助 利奥

编辑:此问题已通过Tomcat 7.0.28(Bug Descriptionchangelog

解决

5 个答案:

答案 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