如何在相同的端口上使用socketio和ws,但是在不同的路径上

时间:2014-12-08 15:15:47

标签: node.js websocket socket.io

我使用socketio作为我的websocket库启动了一个应用程序,但现在我需要使用不支持socketio的sharejs。我会改变图书馆,但我已经走了很长一段路。

我尝试使用websocket ws库,当我将socketio和ws放在不同的服务器端口上时,它似乎才有效。

我需要能够为它们使用相同的端口。请问我该怎么做。我发现我可以将它们放在不同的路径上,但我无法成功地做到这一点。我真的很感激建议或答案。

1 个答案:

答案 0 :(得分:1)

这有点奇怪,因为express不支持websocket请求的正确路由。第一步是将'destroy upgrade': false作为选项传递给socket.io。如果没有它,它将关闭它无法识别的路径上的websocket连接。

然而,关闭错误的websocket连接仍然很重要。我们会告诉ws何时这样做,因此我们可以同时容纳两条有效路径。我们需要将一个函数作为verifyClient选项传递给ws.Server构造函数。该函数应该使用参数(info, next)。您可以使用info.req.url来确定这是否是您正在处理的路径。这里有3个案例:

  1. socket.io正在处理此路径。从函数返回没有 呼叫下一个。这告诉ws既不关闭连接也不关闭 试着去处理它。

  2. ws正在处理此路径。致电next(true) - 这会告诉ws 处理握手然后发起connection事件。

  3. 没有人正在处理此请求。致电next(false) - 这就说明了 ws关闭连接。