我正在尝试使用 express-ws 为 express 启用 websocket。我有两个快递服务器,都使用 ws。两个服务器的 ws 设置代码完全相同(路径名除外)。其中一台服务器按预期工作。另一个,一旦与退出代码 1005 建立连接就关闭。据我研究,我发现 1005 被描述为在意外断开连接的情况下返回的特殊错误代码。我尝试在 ws 路由处理程序中登录,但它什么也没打印。在“连接”处理程序也不会被触发。
const expressWs = require('express-ws')(server, null { wsOptions: { clientTracking: true } });
//<... HTTP route setup and middleware mounting >
server.ws('/',(sck, req)=> {
sck.on('connection', (s1) => {
console.dir(s1);
console.log('Connected')
});
let interval = setInterval(() => {
expressWs.getWss().clients.forEach(s => {
if(s.readyState === WS_CONSTANTS.Open) {
s.ping(null, false, null);
}
});
}, WS_HEARTBEAT_DELAY);
sck.on('close', (ev) => {
console.dir(ev);
clearInterval(interval);
});
//<... Other code for route handling >
如您所见,我实现了一种“心跳”技术,用于向客户端发送 ping 以保持连接处于活动状态。如前所述,它仅适用于其中一台服务器。我对为什么返回 1005 感到非常困惑。
编辑 1
在此帖子之后,我尝试手动更新 express-ws 的 ws 包。这仍然没有解决问题,并且如前所述,连接仍然以 1005 断开。