当服务器需要向客户端推送有关服务器上发生的某些事件的实时信息时,WebSockets 很有用。这避免了客户端进行多次轮询 AJAX 调用来验证服务器上是否发生了某些事件。
想象一个简单的聊天应用程序。如果客户端需要知道聊天会话中的其他参与者是否写了一些东西以便显示它,他将需要定期进行 AJAX 调用以在服务器上验证这一点。另一方面,WebSockets 允许服务器在发生这种情况时通知客户端,因此在网络流量方面效率更高。 WebSockets 协议还允许服务器同时向多个订阅的客户端推送实时信息:例如,您可以让 Web 浏览器和移动应用程序订阅 WebSocket 并直接通过服务器相互通信。使用 AJAX,这些场景将更难实现,并且需要更多的无状态 HTTP 调用。
我知道会话 cookie 将在每个 http 请求期间在客户端和服务器之间发送,这种情况在客户端使用套接字的服务器交互期间是否相同
WebSockets 协议不同于 HTTP 协议。因此,在最初的握手发生后(通过 HTTP 发生),不再有 HTTP 特定事物的概念,例如 cookie。
在使用 WebSockets 时,您应该注意一件重要的事情:它需要在客户端和服务器之间建立持久连接。当您需要对服务器进行负载平衡时,这可能会变得很棘手。当然,WebSockets 协议的不同实现可能会为这个问题提供解决方案。例如,Socket.IO has a Redis 实现允许服务器通过节点集群跟踪连接的客户端。