使用nodejs + socket.io的websocket服务器不能通过testing站点连接,而ws可以

我想创build一个websocket服务器。 我听说socket.io是一个不错的select。

我用nodejs(v4.4.7)(npm install –save socket.io)尝试socket.io,使用它的示例服务器端代码 。 有一点困惑,为什么客户端代码使用“http://”而不是“ws://”协议,但是在我设置了一个真正的服务器进行testing之后,我发现“http //”和“ws //”将使用官方代码工作。

一切都很好,直到现在。 但很快我发现我不能使用第三方在线testing站点build立连接,如:
1. www.websocket.org/echo.html
2. www.blue-zero.com/WebSocket

连接似乎从来没有build立或closures尽快连接,
在Firefox控制台中,我发现“Firefox无法在ws:// mytestserver:8888 /?encoding = text中build立与服务器的连接”
或“WebSocket连接到'ws:// mytestserver:8888'失败:连接在收到握手响应之前closures”。

最后我把socket.io改成了ws(npm install –save ws)。 使用来自github.com/websockets/ws的示例代码。 所有testing站点运行良好。

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

有谁知道为什么socket.io不能与第三方客户端同时工作吗? 非常感谢。

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

虽然socket.io使用webSocket作为底层传输,但它在webSocket之上添加了一层来实现一大堆附加function ,并且需要服务器端对socket.io的支持。 所以,你不能用socket.io客户端连接到一个普通的webSocket服务器。

你必须匹配:

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