ket*_*ket 40 javascript html5 websocket socket.io
我使用此代码构建我的websocket连接(例如):
var socket = new WebSocket("ws://94.12.176.177:8080");
Run Code Online (Sandbox Code Playgroud)
我关闭了这个连接:
socket.close();
Run Code Online (Sandbox Code Playgroud)
但是如何重新建立连接?
我做了一些研究并尝试了几种方法.这个问题无法帮助我:断开连接时Socket.io重新连接? 这是唯一接近我正在寻找的结果.
我想这样做的原因是允许用户暂时停止向网络发送数据,并在一段时间后再次重新发送.如果没有重新连接,用户必须刷新页面才能重新发送.这可能会导致一些数据丢失.谢谢.
SzG*_*SzG 67
当服务器关闭连接时,客户端不会尝试重新连接.可能有一些JS框架,但问题是,在这个答案的时候,标记为普通的Vanilla JS.
我有点沮丧,因为接受的,恭维的答案显然是错误的,并且在找到正确的解决方案时花了我一些额外的时间.
这是:当服务器在WebSocket中重新启动时重新连接客户端
Jiv*_*ngs 13
您必须重新创建套接字才能使其重新连接.唯一的问题是你必须重新连接你的处理程序.
但实际上,websockets旨在保持开放.
更好的方法是让服务器关闭连接.这样websocket将触发一个onclose事件,但会继续尝试建立连接.当服务器再次侦听时,将自动重新建立连接.
小智 5
我在此页面上找到了最佳解决方案:sam-low.com
原始连接关闭后,您需要使用新的事件侦听器创建一个新的WebSocket对象
function startWebsocket() {
var ws = new WebSocket('ws://localhost:8080')
ws.onmessage = function(e){
console.log('websocket message event:', e)
}
ws.onclose = function(){
// connection closed, discard old websocket and create a new one in 5s
ws = null
setTimeout(startWebsocket, 5000)
}
}
startWebsocket();
Run Code Online (Sandbox Code Playgroud)
请注意,如果重新连接时出现问题,新的WebSocket对象仍将收到另一个close事件,这意味着onclose()即使它从未在技术上打开过,该事件也将执行。这就是为什么延迟五秒很明智的原因-如果没有延迟,您可能会发现自己创建和破坏了数千个Websocket连接,并且连接速度可能会中断。