Node.js: SocketIO(WebSockets)与Http的区别

3
  1. 通常我使用ajax http请求来获取/提交数据。现在我在考虑为什么不用socketIO替换所有的ajax get请求?是否有任何不利之处?
  2. 我知道通过http头发送会话cookie将在每个http请求之间在客户端和服务器之间发送;在使用socket进行客户端<=>服务器交互时,如果存在的话,浏览器中的会话cookie是否会自动通过socket头发送到服务器?
  3. 在哪些用例中应该选择SocketIO而不是Http?(如果您认为这是一个需要广泛回答的问题,那么可以链接给我一些相关文章)
1个回答

4
WebSockets很有用,当服务器需要向客户端推送一些关于服务器上发生的事件的实时信息时。这避免了客户端多次轮询AJAX调用以验证服务器上是否发生了某个事件。
想象一个简单的聊天应用程序。如果客户端需要知道聊天会话中的另一个参与者是否已经写了一些内容以便显示它,他将需要定期进行AJAX调用以在服务器上验证此内容。另一方面,WebSockets允许服务器在此事件发生时通知客户端,因此在网络流量方面更加高效。此外,WebSockets协议允许服务器同时向多个订阅客户端推送实时信息:例如,您可以订阅WebSocket并相互直接通过服务器进行通信的Web浏览器和移动应用程序。使用AJAX这种情况将更难实现,并且需要更多无状态HTTP调用。
“我了解到,在每个http请求期间,会在客户端和服务器之间发送会话cookie,那么在使用sockets进行客户端<=>服务器交互时是否也是这种情况呢?”
WebSockets协议与HTTP协议不同。因此,在初始握手完成后(这发生在HTTP上),就没有更多关于HTTP特定事物的概念,例如cookies。
使用WebSockets时需要注意一件重要的事情:需要在客户端和服务器之间建立持久连接。这可能会使负载均衡变得棘手。当然,WebSockets协议的不同实现可能会提供解决此问题的方案。例如,Socket.IO有一个Redis实现,允许服务器通过节点群跟踪连接的客户端。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接