本文介绍了使用 Server-Sent 事件进行双向客户端-服务器通信(而不是 WebSockets)的缺点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近我发现 Server-Sent 事件是 WebSockets 的一种更简单的替代方案,用于从服务器进行推送.大多数比较它们的地方(如此处这里here) 说,如果您不需要客户端和服务器之间的全双工通信,那么 WebSockets 是矫枉过正,而 SSE 就足够了.

Recently I've found out of Server-Sent events as a much simpler alternative to WebSockets for doing push from the server. Most places that compare them (like here, here and here) say that if you don't need full duplex communications between client and server, then WebSockets is overkill and SSE are good enough.

我的问题是,当您确实需要双向通信(例如聊天)时,使用 SSE 的缺点是什么,使用常规 ajax 请求从客户端发送消息并使用服务器流接收消息?考虑到我几乎不需要在服务器端做任何配置就可以使用 SSE,这似乎是一个更有吸引力的选择.

My question is what would be the downside of using SSE when you do need bidirectional communications (like a chat for example), using regular ajax requests for sending messages from the client and the server stream for receiving them? Considering that I have to do little to no configuration on the server side to use SSE, it seems to be a much more appealing option.

推荐答案

SSE 优势优于 WebSockets:

SSE Advantages over WebSockets:

  • 无需更改特殊的网络服务器或网络代理.
  • 定义自定义事件(否则客户端 API 基本相同)
  • 更轻松地集成现有身份验证机制(OAuth、OpenID 等)

SSE 缺点与 WebSockets 相比:

SSE Disadvantages compared to WebSockets:

  • 单向通信通道(服务器到客户端).客户端到服务器需要单独的通道.
  • 浏览器支持更加有限(没有原生 IE 支持,而 IE 10 支持 WebSockets):WebSockets, SSE
  • 依赖客户端来验证来源(可能比 WebSockets 更容易受到 XSS 攻击)
  • 对二进制类型没有原生支持(WebSockets 支持使用 ArrayBuffers 和 Blob 的原始帧).
  • 即使 SSE 端点不提供静态 Web 内容,也需要一个完整的 Web 服务器(独立的 WebSocket 服务器可以相当简单)
  • 使用 AJAX 进行双向通信的 SSE 将比使用 WebSocket 连接具有更高的往返延迟和更高的客户端->服务器带宽.这是由于每个客户端-> 服务器 AJAX 请求的连接设置开销.此外,由于在许多配置中,长期保持的连接最终将关闭(通常每 30 秒一次)并且需要重新打开,从而导致服务器-> 客户端延迟出现临时峰值,因此 SSE 的服务器-> 客户端延迟可能会出现峰值.

参考文献:

这篇关于使用 Server-Sent 事件进行双向客户端-服务器通信(而不是 WebSockets)的缺点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-23 01:23
查看更多