Dou*_*eri 67 javascript java google-chrome jetty websocket
我正在java中构建一个具有基于jetty的嵌入式websocket服务器的应用程序.客户端是Google Chrome中的默认websocket实现.只有在连接关闭一定时间后服务器和客户端之间没有传输时,一切正常.我不确定谁正在关闭连接:jetty服务器或chrome浏览器.
我认为解决方案是每隔x秒发送一条消息,但我打开了更好的解决方案.
所以......我的问题是:
这是websocket协议所需要的东西吗?在这种情况下,chrome浏览器正在关闭我的连接?
这是否与jetty相关并且或多或少与websocket协议有关?在这种情况下,如何在码头禁用此功能?
还有其他问题吗?
谢谢
更新:即使我发送1条消息/秒仍然关闭连接
Ant*_*era 39
在回答您的第三个问题时:您的客户希望能够应对临时网络问题,例如,假设用户在休眠的会议之间关闭笔记本电脑,或者网络暂时中断.
解决方案是侦听oncloseWeb套接字客户端上的事件,当它们发生时,设置客户端超时以重新打开连接,比如说:
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);
};
}
Run Code Online (Sandbox Code Playgroud)
Leo*_*eoR 10
我发现了另一个相当快速和肮脏的解决方案.如果您使用低级方法来实现WebSocket并且您onOpen自己实现该方法,则会收到实现该WebSocket.Connection接口的对象.此对象具有可以调整的setMaxIdleTime方法.
小智 7
实际上,您可以使用WebSocketServletFactory实例在Jetty服务器端配置中设置超时间隔.例如:
WebSocketHandler wsHandler = new WebSocketHandler() {
@Override
public void configure(WebSocketServletFactory factory) {
factory.getPolicy().setIdleTimeout(1500);
factory.register(MyWebSocketAdapter.class);
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107528 次 |
| 最近记录: |