【问题标题】:Nodejs: SocketIO (websockets) vs HttpNodejs:SocketIO(websockets)vs Http
【发布时间】:2017-05-01 15:01:55
【问题描述】:
  1. 通常我使用 ajax http 请求来获取/发布数据。现在我有这样的想法,为什么我不应该用 socketIO 替换所有的 ajax get 请求?遵循这种方法有什么缺点吗?
  2. 我了解,在每次 http 请求期间,通过 http 标头的会话 cookie 将在客户端和服务器之间发送,在客户端使用套接字的服务器交互期间,浏览器中的会话 cookie 是否会通过套接字标头自动发送到服务器(如果存在)?
  3. 在哪些用例中我应该更喜欢 SocketIO 而不是 Http?(如果您认为这是一个需要广泛回答的问题,那么您可以将我链接到一些相关文章)

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 2016-07-17
      • 2021-09-05
      • 1970-01-01
      • 2014-03-17
      • 2015-04-04
      • 2013-01-20
      • 1970-01-01
      相关资源
      最近更新 更多