采用双向的客户端 - 服务器通信服务器发送的事件(而不是网页套接字)的缺点(Downside of

2019-08-02 10:47发布

最近,我发现了服务器发送的事件作为WebSockets的从服务器做俯卧撑一个更简单的替代。 即比较它们(最喜欢的地方在这里 , 这里和这里 )说,如果你不需要客户端和服务器之间的全双工通信,那么的WebSockets是矫枉过正和SSE都不够好。

我的问题是什么是使用SSE的缺点,当你确实需要(例如像聊天)双向通信,使用常规的Ajax请求从客户端和接收他们的服务器流发送消息? 考虑到我要做一点在服务器端使用SSE无需配置,这似乎是一个更加有吸引力的选择。

Answer 1:

上证所在优势的WebSockets:

  • 不需要特殊的Web服务器或Web代理服务器的变更。
  • 定义自定义事件(否则,客户端API基本相同)
  • 更轻松地集成现有的认证机制(OAuth的,OpenID的,等等)

SSE 缺点相比,WebSockets的:

  • 单向通信信道(服务器到客户端)。 客户机到服务器需要一个单独的信道。
  • 浏览器支持较为有限(没有本机支持IE而在的WebSockets IE被支撑10): 的WebSockets , SSE
  • 凭借在客户端验证原点(可能更容易受到比WebSockets的XSS攻击)
  • 对于二进制类型没有原生支持(支持的WebSockets使用ArrayBuffers和斑点原始帧)。
  • 需要即使SSE端点没有提供静态网页内容完全成熟的Web服务器(一个独立的WebSocket服务器可以是相当简单)
  • 上证所与AJAX双向通信将具有更高的往返时延和更高的客户端 - >服务器的带宽比使用WebSocket连接。 这是由于连接建立的开销为每个客户端 - >服务器AJAX请求。 此外,服务器 - >客户端延迟可以有SSE尖峰,因为在许多配置长期持有的连接最终将被关闭(每30秒一次),需要重新打开导致服务器 - 临时的峰值>客户端延迟,以及。

参考文献:

  • http://www.html5rocks.com/en/tutorials/eventsource/basics/
  • https://developer.mozilla.org/en-US/docs/Server-sent_events
  • https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
  • http://dev.w3.org/html5/eventsource/


Answer 2:

比起小的WebSocket消息Ajax请求是巨大的。 标准的HTTP请求(阿贾克斯)包括了很多标题,包括每个请求的cookie,而WebSocket的消息只是一个几个字节。

与HTTP(阿贾克斯)请求的好处是,他们更容易缓存,如果这是你的问题是有利的。



文章来源: Downside of using Server-Sent events for bidirectional client-server communication (instead of WebSockets)