插座之间有什么区别。IO和websockets在
node . js ?
它们都是服务器推送技术吗?
我觉得唯一的不同是,
套接字。IO允许我通过指定事件名称来发送/发出消息。
对于socket。io消息从服务器将到达所有客户端,但同样在websockets,我被迫保持一个数组的所有连接和循环通过它发送消息到所有客户端。
同时,
我想知道为什么网络检查员(如Chrome/firebug/fiddler)无法从服务器捕捉这些消息(从socket.io/websocket) ?
请澄清这一点。
TLDR:
的套接字。Io '是一个应用层规范,可以在/使用应用层规范'websockets'之上实现。
websocket规范
套接字。io规范
我认为简单的答案是在基本的web技术定义中:
Specification: A documented standard detailing the requirements for a program to achieve in order to be labeled as "an implimentation of some sepc." It is important to achieve this rubber stamp when building programs, because any program is only as good at the machine executing the code. Programming is fundamentally built upon specifications, and if, they are not followed code will not execute correctly. However, a specification does nothing. It is just a text document.
Implementation: This is actual, executable code that accomplishes what the specification says to do.
Application Layer - System that defines messages and handshakes sent over transport. This is the stuff you have to know when working with HTTP/Websockets/Socketio. It defines how the connections will be made, authenticated, data will be sent, and how it will arrive.
我想在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/了解更多信息。