Express-Ws关闭连接意外关闭

时间:2019-03-24 20:53:14

标签: node.js express ws

我正在尝试使用express-ws启用websocket进行快递。我有两个快递服务器,都使用ws。设置ws的代码对于两个服务器都是完全相同的(路径名除外)。其中一台服务器正在按预期方式工作。另一个,一旦与出口代码1005建立连接就关闭。据我研究,我发现1005被描述为在意外断开连接的情况下返回的特殊错误代码。我已经尝试在ws路由处理程序中登录,并且它什么也不会打印。在“连接”上,处理程序也不会触发。

function addMessage() {
    var container = document.getElementById("message-area");
    var messageElem = document.createElement("div");
    messageElem.setAttribute("class", "message-area__message");
    messageElem.appendChild(document.createTextNode("my message"));
    container.appendChild(messageElem);
}

window.addEventListener('load', function() {
    console.log('loaded')
    for (var i=0; i<5; i++) {
      window.setTimeout(addMessage, 500*i);
    }
});

如您所见,我实现了一种“心跳”技术,用于向客户端发送ping以使连接保持活动状态。如前所述,它仅适用于其中一台服务器。我对为什么返回1005感到非常困惑。

编辑1

在这篇文章here之后,我尝试手动为express-ws更新ws软件包。如前所述,这仍然无法解决问题,并且连接仍被1005断开。

1 个答案:

答案 0 :(得分:0)

好的,我终于找到了错误。在服务器代码中,我有以下内容:

server.get('*', async (req, res, nxt) => {
   nxt(new Error('Unsupported Method'));
});

我这样做是为了防止处理任何获取请求,因为该API仅依赖于发布路线。我将其更改为以下内容:

server.get('*', async (req, res, nxt) => {
    nxt();
});

这解决了问题。恕我直言,我认为ws的“升级”是通过GET发生的,并且响应错误以获取请求阻止了任何升级请求。另外,我确保其他服务器没有这种阻塞,这就是为什么我最初认为两个服务器都具有相同的设置,这使我感到困惑。希望这会有所帮助。