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