socket.io和websockets之间的区别

node.js Node.js

神乐Green

2020-03-17

node.js中的socket.io和websockets有什么区别?
它们都是服务器推送技术吗?我唯一感到的是

  1. socket.io允许我通过指定事件名称来发送/发送消息。

  2. 对于socket.io,来自服务器的消息将到达所有客户端,但是对于websockets中的消息,我被迫保留所有连接的数组并循环遍历,以将消息发送给所有客户端。

另外,我想知道为什么Web检查器(例如Chrome / firebug / fiddler)无法从服务器捕获这些消息(来自socket.io/websocket)?

请澄清一下。

第1914篇《socket.io和websockets之间的区别》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

5个回答
L十三 2020.03.17

即使现代的浏览器现在支持WebSockets,我也认为没有必要丢弃SocketIO,并且它在当今的任何项目中仍然占有一席之地。这很容易理解,而且个人而言,由于SocketIO,我了解了WebSockets的工作方式。

如本主题所述,有许多用于Angular,React等的集成库以及用于TypeScript和其他编程语言的定义类型。

我要添加到Socket.io和WebSockets之间的区别的另一点是,使用Socket.io进行群集并不是什么大问题。Socket.io提供了可用于将其与Redis链接以增强可伸缩性的适配器例如,您有ioredissocket.io-redis

是的,我知道,SocketCluster存在,但这是题外话。

HarryItachi 2020.03.17

Socket.IO使用WebSocket,当WebSocket不可用时,使用后备算法进行实时连接。

前端古一 2020.03.17

使用Socket.IO基本上类似于使用jQuery-您想要支持旧版浏览器,需要编写更少的代码,并且该库将提供后备功能。Socket.io使用websockets技术(如果可用),如果不可用,则检查可用的最佳通信类型并使用它。

达蒙Tom 2020.03.17

我将提供一个反对使用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模块非常易于使用。

小小十三 2020.03.17

它的优点是,它简化了如#2中所述的WebSockets的使用,并且可能更重要的是,如果浏览器或服务器上不支持WebSockets,它可以将故障转移到其他协议。我将避免直接使用WebSocket,除非您非常熟悉WebSockets在什么环境下不起作用,并且您能够解决这些限制。

这对WebSockets和Socket.IO都是不错的阅读。

http://davidwalsh.name/websocket

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android