3

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

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

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

谢谢你的帮助,
狮子座

编辑:这个问题已经用 Tomcat 7.0.28 解决了(错误描述更新日志

4

5 回答 5

4

Tomcat 的 WebSocket 有几个问题,其中之一是它会在 20 秒后关闭连接(这是 server.xml 中的 connectTimeout 值)。增加该值以解决该问题。

——让弗朗索瓦

于 2012-05-08T11:30:05.573 回答
4

我设法让 websocket 无限打开。您需要做的就是将ApacheconnectionTimeout中的设置server.xml为减一 ( connectionTimeout="-1")。这解决了我的问题。:) 参考:

于 2012-10-18T15:42:50.680 回答
1

如果您需要保持连接打开,请 ping 客户端/服务器。这是可靠地确保连接结束时有东西的唯一方法。

互联网不是一种可靠的传输方式,因此确保您的代码可以处理断开连接是值得的。

于 2012-05-09T07:20:22.407 回答
0

在 SERVER.XML 中设置

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="999999"
           redirectPort="8443" />
于 2012-05-21T09:07:06.593 回答
0

除了 server.xml 中的 connectionTimeout 设置之外,另一个原因也可能是您的 websocket 消息实现类。getReadTimeout 方法是一种用于以毫秒为单位设置 websocket 超时的方法。例如,如果您想将套接字超时设置为 2 分钟 (2*60*1000),则可以使用以下代码。注意:您可以通过返回 -1 来设置无限超时(始终打开)。

@Override
public int getReadTimeout() {
    return 2*60*1000;
}

如需完整实施,请在我的答案中参考此示例代码。 tomcat websocket servlet监听端口

于 2013-12-23T09:24:45.693 回答