ade*_*ago 16 javascript sockets websocket node.js
我一直在寻找"WebSocket已处于CLOSING或CLOSED状态"问题的解决方案,并发现:
答案#1与Meteor严格相关,#2没有答案......我有一个带套接字的节点服务器应用程序:
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);
});
});
Run Code Online (Sandbox Code Playgroud)
客户端连接如下:
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);
});
Run Code Online (Sandbox Code Playgroud)
但是几分钟后,客户端随机断开连接和功能
socket.send(JSON.stringify(data));
Run Code Online (Sandbox Code Playgroud)
然后将抛出"WebSocket已经处于CLOSING或CLOSED状态.".
我正在寻找一种方法来检测和处理这些断开连接,并立即尝试再次连接.
什么是最正确有效的方法?
yey*_*eya 20
最简单的方法是在发送之前检查套接字是否打开。
例如 - 编写一个简单的函数:
function isOpen(ws) { return ws.readyState === ws.OPEN }
Run Code Online (Sandbox Code Playgroud)
然后 - 在任何之前socket.send确保它是打开的:
if (!isOpen(socket)) return;
socket.send(JSON.stringify(data));
Run Code Online (Sandbox Code Playgroud)
您也可以send像this answer一样重写函数,但按照我的方式,您可以记录这种情况。
而且,对于您的第二个请求
立即尝试再次连接
您无法从服务器执行此操作。
客户端代码应监控 WebSocket 状态并根据您的需要应用重新连接方法。
例如 - 检查这个做得很好的 VueJS 库。查看启用 ws 自动重新连接部分
| 归档时间: |
|
| 查看次数: |
14096 次 |
| 最近记录: |