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



我正在尝试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 侦听端口

相关内容

  • 没有找到相关文章

最新更新