Javascript 如何抓住和处理;WebSocket已处于关闭或关闭状态”;在节点中
我一直在寻找“WebSocket已处于关闭或关闭状态”问题的解决方案,发现: 答案#1表示与流星严格相关,而#2没有答案。。。我有一个带有套接字的节点服务器应用程序:Javascript 如何抓住和处理;WebSocket已处于关闭或关闭状态”;在节点中,javascript,node.js,sockets,websocket,Javascript,Node.js,Sockets,Websocket,我一直在寻找“WebSocket已处于关闭或关闭状态”问题的解决方案,发现: 答案#1表示与流星严格相关,而#2没有答案。。。我有一个带有套接字的节点服务器应用程序: const WebSocket = require('ws'); const wss = new WebSocket.Server({ server }); wss.on('connection', function connection(socket) { socket.on('message', function i
const WebSocket = require('ws');
const wss = new WebSocket.Server({ server });
wss.on('connection', function connection(socket) {
socket.on('message', function incoming(data) {
console.log('Incoming data ', data);
});
});
客户的连接方式如下:
const socket = new WebSocket('ws://localhost:3090'); //Create WebSocket connection
//Connection opened
socket.addEventListener('open', function(event) {
console.log("Connected to server");
});
//Listen to messages
socket.addEventListener('message', function(event) {
console.log('Message from server ', event);
});
但是,几分钟后,客户端会随机断开连接,并关闭该功能
socket.send(JSON.stringify(data));
然后将抛出“WebSocket已处于关闭或关闭状态”
我正在寻找一种方法来检测和处理这些断开,并立即尝试再次连接
最正确有效的方法是什么?最简单的方法是在发送前检查套接字是否打开 例如-编写一个简单的函数:
function isOpen(ws) { return ws.readyState === ws.OPEN }
然后-在任何套接字之前。发送确保它已打开:
if (!isOpen(socket)) return;
socket.send(JSON.stringify(data));
您也可以像这样重写send
函数,但以我的方式,您可以记录这种情况
还有,你的第二个要求
立即尝试再次连接
您无法从服务器上执行此操作
客户端代码应该监控WebSocket状态,并根据需要应用重新连接方法
例如,检查VueJS库是否能很好地完成这项工作。请看Enable ws reconnect automatically部分,我的答案很简单,就是您在一段时间内向web套接字发送消息,以了解您正在使用该服务。这比你得到另一个连接要好。现在,您开始您的项目,其中有web套接字函数和检查元素,以查看状态时间,并查看关闭时“挂起”的更改时间。因此,现在您将定义一个interval媒体,使setInterval函数如下所示,例如:在此处输入code
const conn=WebSocket(“WSS://YourLocationWebSocket.com”);
setInterval(函数(){
var object={“message”:“ARandonMessage”};
object=JSON.stringify(对象);
控制发送(对象);
},/*时间,我建议为40秒,因此*/40000)
可能重复的问题您可以找到答案这是一个已知的问题,影响了很多人。这可能有助于: