socket.io和websockets之间的区别
node.js中的socket.io和websockets之间有什么区别?
node.js中的socket.io和websockets有什么区别?
它们都是服务器推送技术吗?
我觉得唯一的区别是、
1.socket.io允许我通过指定一个事件名称来发送/发射消息。
2.2.在socket.io的情况下,来自服务器的消息将到达所有的客户端,但在websockets中,我不得不保留一个所有连接的数组,并通过它循环向所有客户端发送消息。
另外、 我想知道为什么网络检查器(如Chrome/firebug/fiddler)无法从服务器上捕获这些消息(来自socket.io/websocket)?
请澄清这一点。
398
3
误解
关于WebSocket和Socket.IO,有一些常见的误解:
1.第一个误解是,使用Socket.IO明显比使用WebSocket简单,但情况似乎并非如此。请看下面的例子。
2.第二个误解是,WebSocket在浏览器中没有得到广泛支持。更多信息见下文。
3.第三个误解是,Socket.IO将连接降级作为老式浏览器的退路。实际上,它假定浏览器是旧的,并启动与服务器的AJAX连接,在交换了一些流量后,在支持WebSocket的浏览器上会被升级。详情见下文。
我的实验
我写了一个npm模块来演示WebSocket和Socket.IO的区别:
这是一个服务器端和客户端代码的简单例子--客户端使用WebSocket或Socket.IO连接到服务器,服务器以1s的间隔发送三条信息,这些信息被客户端添加到DOM中。
服务器端
比较服务器端使用WebSocket和Socket.IO的例子,在Express.js应用程序中做同样的事情:
WebSocket服务器
使用Express.js的WebSocket服务器例子:
来源:https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.js
Socket.IO服务器
使用Express.js的Socket.IO服务器例子:
来源:https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.js
客户端
比较客户端使用WebSocket和Socket.IO的例子,在浏览器中做同样的事情:
WebSocket客户端
使用vanilla JavaScript的WebSocket客户端示例:
来源:https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.html
Socket.IO客户端
使用vanilla JavaScript的Socket.IO客户端例子:
来源:https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.html
网络流量
要看到网络流量的差异,你可以[运行我的测试](https://github.com/rsp/node-websocket-vs-socket.io#readme)。以下是我得到的结果:
WebSocket结果
2个请求,1.50 KB,0.05 s
从这2个请求中:
1.HTML页面本身 2.连接升级到WebSocket
(连接升级请求在开发者工具上可见,有101个切换协议的响应。)
Socket.IO结果
6个请求,181.56 KB,0.25 s
从这6个请求中
屏幕截图
我在localhost上得到的WebSocket结果:
我在localhost上得到的Socket.IO结果:
测试自己
快速启动:
在浏览器中打开http://localhost:3001/,用Shift+Ctrl+I打开开发者工具,打开网络标签,用Ctrl+R重新加载页面,查看WebSocket版本的网络流量。
在浏览器中打开http://localhost:3002/,用Shift+Ctrl+I打开开发者工具,打开网络标签,用Ctrl+R重新加载页面,以查看Socket.IO版本的网络流量。
要卸载:
浏览器兼容性
截至2016年6月,WebSocket可在除Opera Mini之外的所有浏览器上运行,包括高于9的IE。
这是截至2016年6月,WebSocket在Can I Use上的浏览器兼容性:
![在此输入图片描述][3] 。
参见http://caniuse.com/websockets,以了解最新信息。
它的优点是简化了你在第2条中描述的WebSockets的使用,可能更重要的是,在浏览器或服务器不支持WebSockets的情况下,它提供了其他协议的故障转移。我将避免直接使用WebSockets,除非你非常熟悉它们在什么环境下不能工作,而且你有能力绕过这些限制。
这是一篇关于WebSockets和Socket.IO的好文章。
http://davidwalsh.name/websocket
我将提供一个反对使用socket.io的论据。
我认为使用socket.io仅仅是因为它有回退功能并不是一个好主意。让 IE8 消失吧。
在过去,有很多NodeJS的新版本破坏了socket.io的情况。 你可以查看这些例子... https://github.com/socketio/socket.io/issues?q=install+error
如果你去开发一个Android应用或需要与你现有的应用一起工作的东西,你可能会马上与WS一起工作,socket.io可能会在那里给你带来一些麻烦...
另外,Node.JS的WS模块使用起来也非常简单。