我使用socketio作为我的websocket库启动了一个应用程序,但现在我需要使用不支持socketio的sharejs。我会改变图书馆,但我已经走了很长一段路。
我尝试使用websocket ws库,当我将socketio和ws放在不同的服务器端口上时,它似乎才有效。
我需要能够为它们使用相同的端口。请问我该怎么做。我发现我可以将它们放在不同的路径上,但我无法成功地做到这一点。我真的很感激建议或答案。
答案 0 :(得分:1)
这有点奇怪,因为express不支持websocket请求的正确路由。第一步是将'destroy upgrade': false
作为选项传递给socket.io。如果没有它,它将关闭它无法识别的路径上的websocket连接。
然而,关闭错误的websocket连接仍然很重要。我们会告诉ws
何时这样做,因此我们可以同时容纳两条有效路径。我们需要将一个函数作为verifyClient
选项传递给ws.Server
构造函数。该函数应该使用参数(info, next)
。您可以使用info.req.url
来确定这是否是您正在处理的路径。这里有3个案例:
socket.io正在处理此路径。从函数返回没有
呼叫下一个。这告诉ws
既不关闭连接也不关闭
试着去处理它。
ws正在处理此路径。致电next(true)
- 这会告诉ws
处理握手然后发起connection
事件。
没有人正在处理此请求。致电next(false)
- 这就说明了
ws
关闭连接。