使用nodejs + socket.io的websocket服务器无法通过测试站点连接,而ws可以

时间:2016-07-31 11:25:40

标签: node.js websocket

我想创建一个websocket服务器。我听说socket.io是个不错的选择。

我使用其样本server side code尝试使用nodejs(v4.4.7)(npm install --save socket.io)的socket.io。有点困惑为什么客户端代码使用“http://”而不是“ws://”协议,但在我设置真正的服务器进行测试后,我发现“http //”和“ws //”将使用官方代码。

到目前为止,一切都很好。但很快我发现我无法使用第三方在线测试站点建立连接,例如:
 1. www.websocket.org/echo.html
 2. www.blue-zero.com/WebSocket

连接似乎从未建立或关闭asap connected,
我在Firefox控制台中发现“Firefox无法在ws:// mytestserver:8888 /?encoding = text”与服务器建立连接,
或“WebSocket连接到'ws:// mytestserver:8888'失败:连接在收到握手响应之前关闭”在Chrome控制台中。

最后我将socket.io更改为ws(npm install --save ws)。使用github.com/websockets/ws中的示例代码。所有测试站点都运行良好。

(当然,我的最终目的不是让测试站点工作。事实上,基于我的芯片中集成的nopoll的websocket lib与测试站点具有完全相同的行为。)

有人知道socket.io不能与第三方客户端一起工作的原因吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

socket.io在服务器端需要一个socket.io服务器。它不会只连接到webSocket服务器。

虽然socket.io使用webSocket作为底层传输,但它在webSocket之上添加了一个层来实现whole bunch of additional features,并且需要服务器端支持socket.io。因此,您无法使用socket.io客户端连接到普通的webSocket服务器。

您必须匹配:

webSocket client <==> webSocket server
socket.io client <==> socket.io server