网络开关关闭连接自动 [已关闭]

我正在用java构建一个应用程序,该应用程序具有基于jetty的嵌入式websocket服务器。客户端是谷歌浏览器中的默认 websocket 实现。一切正常,只有在连接关闭一定时间后服务器和客户端之间没有传输。我不确定谁在关闭连接:码头服务器还是chrome浏览器。

我认为解决这个问题的方法是每x秒发送一条消息,但我对更好的解决方案持开放态度。

所以。。。我的问题是:

  1. 这是websocket协议所要求的,在这种情况下,chrome浏览器正在关闭我的连接吗?

  2. 这是否与码头更相关,并且或多或少与websocket协议有关?在这种情况下,我如何在码头禁用此功能?

  3. 还有另一个问题吗?

谢谢

更新:即使我每秒发送1条消息,连接仍然关闭


答案 1

回答你的第三个问题:你的客户希望能够应对临时的网络问题,例如,假设用户在会议之间关闭了他们的笔记本电脑,这让它处于休眠状态,或者网络只是暂时关闭。

解决方案是侦听 Web 套接字客户端上的事件,当它们发生时,设置客户端超时以重新打开连接,例如在一秒钟内:onclose

function setupWebSocket(){
    this.ws = new WebSocket('wss://host:port/path');
    this.ws.onerror = ...;
    this.ws.onopen = ...;
    this.ws.onmessage = ...;
    this.ws.onclose = function(){
        setTimeout(setupWebSocket, 1000);
    };
}

答案 2

您需要不时发送 ping 消息。我认为默认超时是300秒。从浏览器发送网络袜子平/乒乓球框架