Nodejs:SocketIO(websockets)vs Http

时间:2017-05-01 15:01:56

标签: node.js socket.io

  1. 通常我使用ajax http请求来获取/发布数据。现在我有想法为什么不应该用socketIO替换所有的ajax get请求?这种方法有什么不利之处吗?
  2. 我了解在每次http请求期间,客户端和服务器之间会发送通过http标头的会话cookie,在使用套接字的客户端< =>服务器交互期间,浏览器中的会话cookie会自动通过套接字标头发送到服务器(如果存在)?
  3. 在哪些用例中,我更喜欢SocketIO而不是Http?(如果您认为这是一个需要广泛答案的问题,那么您可以将我链接到一些相关文章)

1 个答案:

答案 0 :(得分:3)

当服务器需要向客户端提供有关服务器上发生的某些事件的实时信息时,WebSockets非常有用。这可以避免客户端进行多次轮询AJAX调用,以验证服务器上是否发生了某些事件。

想一个简单的聊天应用程序。如果客户端需要知道聊天会话中的其他参与者是否已经编写了某些东西以便显示它,他将需要定期进行AJAX调用以在服务器上验证这一点。另一方面,WebSockets允许服务器在发生这种情况时通知客户端,因此在网络流量方面效率更高。此外,WebSockets协议允许服务器同时将实时信息推送到多个订阅的客户端:例如,您可以使用Web浏览器和移动应用程序订阅WebSocket并直接通过服务器相互通信。使用AJAX这种场景将更难实现,并且需要更多的无状态HTTP调用。

  

据我所知,会话cookie将在每次http请求期间在客户端和服务器之间发送,这种情况在使用套接字的客户端< =>服务器交互期间是相同的

WebSockets协议与HTTP协议不同。因此,在初始握手发生后(通过HTTP发生),没有更多关于HTTP特定事物的概念,例如cookie。

使用WebSockets时应注意一件重要的事情:它需要在客户端和服务器之间建立持久连接。当您需要对服务器进行负载平衡时,这可能会变得棘手。当然,WebSockets协议的不同实现可能会提供此问题的解决方案。例如Socket.IO has a Redis实现允许服务器通过节点集群跟踪连接的客户端。