我想创建一个websocket服务器。我听说socket.io是个不错的选择。
我用nodejs(v4.4.7)(npm install--save socket.io)尝试了socket.io,使用了它的示例服务器端代码。有点困惑为什么客户端代码使用"http://"而不是"ws://"协议,但在我设置了一个真正的服务器进行测试后,我发现"http://"one_answers"ws//"都可以使用官方代码。
到目前为止一切都很好。但很快我发现我无法使用第三方在线测试网站建立连接,如:
1.www.websocket.org/echo.html
2.www.blue-zzero.com/WebSocket
一旦连接,连接似乎从未建立或关闭,
我在Firefox控制台中发现"Firefox无法在ws://mytestserver:8888/?encoding=text上建立与服务器的连接",
或Chrome控制台中的"到"ws://mytestserver:8888"的WebSocket连接失败:在收到握手响应之前连接已关闭"。
最后我把socket.io改成了ws(npm-install--save ws)。使用github.com/websockets/ws中的示例代码。所有测试站点都运行良好。
(当然,我的最终目的不是让测试站点工作。事实上,集成在我的芯片中的基于nopoll的websocket-lib与测试站点具有完全相同的行为。)
有人知道socket.io不适用于第三方客户端而ws适用的原因吗?非常感谢。
socket.io
需要一个位于事物服务器端的socket.io服务器。它不会只连接到webSocket服务器。
虽然socket.io使用webSocket作为底层传输,但它在webSocket之上添加了一层来实现一系列附加功能,这需要服务器端对socket.io的支持。因此,您无法使用socket.io客户端连接到普通的webSocket服务器。
您必须匹配:
webSocket client <==> webSocket server
socket.io client <==> socket.io server