我正在用 java 构建一个应用程序,它有一个基于 jetty 的嵌入式 websocket 服务器。客户端是谷歌浏览器中默认的 websocket 实现。一切正常,只有在连接关闭一段时间后服务器和客户端之间没有传输时。 我不确定是谁在关闭连接: jetty 服务器还是 chrome 浏览器。
我认为解决方案是每 x 秒发送一条消息,但我愿意接受更好的解决方案。
所以...我的问题是:
这是 websocket 协议(protocol)需要的东西吗?在这种情况下,chrome 浏览器正在关闭我的连接?
这是否与 jetty 相关,或多或少与 websocket 协议(protocol)有关?在这种情况下如何在 jetty 禁用它?
还有问题吗?
谢谢
更新:即使我每秒发送 1 条消息,连接仍然关闭
最佳答案
回答您的第三个问题:您的客户无论如何都希望能够应对临时网络问题,例如假设用户在 session 之间关闭笔记本电脑使其 hibernate ,或者网络只是暂时中断。
解决方案是在 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);
};
}
关于java - websocket自动关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9056159/