插座之间有什么区别。IO和websockets在 node . js ? 它们都是服务器推送技术吗? 我觉得唯一的不同是,

套接字。IO允许我通过指定事件名称来发送/发出消息。 对于socket。io消息从服务器将到达所有客户端,但同样在websockets,我被迫保持一个数组的所有连接和循环通过它发送消息到所有客户端。

同时, 我想知道为什么网络检查员(如Chrome/firebug/fiddler)无法从服务器捕捉这些消息(从socket.io/websocket) ?

请澄清这一点。


当前回答

https://socket.io/docs/#What-Socket-IO-is-not(我强调一下)

What Socket.IO is not Socket.IO is NOT a WebSocket implementation. Although Socket.IO indeed uses WebSocket as a transport when possible, it adds some metadata to each packet: the packet type, the namespace and the packet id when a message acknowledgement is needed. That is why a WebSocket client will not be able to successfully connect to a Socket.IO server, and a Socket.IO client will not be able to connect to a WebSocket server either. Please see the protocol specification here. // WARNING: the client will NOT be able to connect! const client = io('ws://echo.websocket.org');

其他回答

套接字。IO使用WebSocket,当WebSocket不可用时使用回退算法进行实时连接。

我想在2021年再提供一个答案。套接字。在2019年9月至2020年8月(将近2年)期间,基本上没有任何活动,我本以为该项目可能已经死亡。

套接字。io也发表了一篇文章,叫做为什么使用Socket。2020年的IO ?除了退回到HTTP长轮询之外,我认为这2个特性都是socket的。IO提供,websocket缺乏

端的自动重连接 将数据广播到给定客户端集(房间/名称空间)的方法

我发现socket的另一个特性。io方便是为ws服务器开发,特别是我使用docker部署我的服务器。因为我总是启动一个以上的服务器实例,跨ws服务器通信是必须的和套接字。IO为它提供https://socket.io/docs/v4/redis-adapter/。

使用redis-adapter,将服务器进程扩展到多个节点很容易,而ws服务器的负载平衡则很困难。点击这里https://socket.io/docs/v4/using-multiple-nodes/了解更多信息。

它的优点是简化了您在#2中所描述的WebSockets的使用,更重要的是,当浏览器或服务器不支持WebSockets时,它提供了对其他协议的故障转移。我会避免直接使用WebSockets,除非你非常熟悉它们不能工作的环境,并且你有能力绕过这些限制。

这是一个关于WebSockets和Socket.IO的很好的阅读。

http://davidwalsh.name/websocket

我将提供一个反对使用socket.io的参数。

我认为是使用socket。仅仅因为IO有后援就不是个好主意。让IE8 RIP。

在过去有很多情况下,新版本的NodeJS破坏了socket.io。你可以在这些列表中找到例子。https://github.com/socketio/socket.io/issues?q=install+error

如果你要开发一个Android应用或者其他需要与现有应用配合的东西,你可能会马上使用WS, socket。IO可能会给你带来一些麻烦…

另外,Node.JS的WS模块使用起来非常简单。

https://socket.io/docs/#What-Socket-IO-is-not(我强调一下)

What Socket.IO is not Socket.IO is NOT a WebSocket implementation. Although Socket.IO indeed uses WebSocket as a transport when possible, it adds some metadata to each packet: the packet type, the namespace and the packet id when a message acknowledgement is needed. That is why a WebSocket client will not be able to successfully connect to a Socket.IO server, and a Socket.IO client will not be able to connect to a WebSocket server either. Please see the protocol specification here. // WARNING: the client will NOT be able to connect! const client = io('ws://echo.websocket.org');