为什么要使用WebSocket,使用它的优势是什么?

43

我尝试阅读一些文章,但对这个主题不是很清楚。

可以有人向我解释以下几点吗:

  • 为什么要使用WebSocket而不是HTTP
  • 什么是全双工通信
  • 低延迟交互是什么意思

1
K.O.标准是指使用套接字的客户端无需向服务器请求任何信息即可获取信息。 - ΦXocę 웃 Пepeúpa ツ
参见:HTTP/2是否使WebSockets过时? - Gabriel Staples
1个回答

88

为什么要使用 WebSocket 而不是 HTTP?

WebSocket 是客户端和服务器之间的持续连接。这种持续连接允许以下操作:

  1. 数据可以在没有客户端请求的情况下随时从服务器发送到客户端。这通常称为服务器推送,并且对于需要快速了解服务器上发生的事件(例如接收到新聊天消息或更新了新价格)的应用程序非常有价值。无法通过 HTTP 向客户端推送数据。客户端必须定期轮询,每几秒钟进行一次 HTTP 请求,以获取及时的新数据。客户端轮询效率低。

  2. 数据可以非常高效地双向发送。因为连接已经建立,且 WebSocket 数据帧非常高效组织(大多数是 6 个额外字节,2 字节头和 4 字节掩码),所以可以比通过包含头、cookie 等信息的 HTTP 请求更加高效地发送数据。

什么是全双工通信?

全双工意味着可以在连接上任何时候双向发送数据。

什么是低延迟交互?

低延迟意味着请求和响应之间的延迟非常小。对于 WebSocket,它只是意味着数据可以更快地发送(特别是在慢速链接上),因为连接已经建立,无需额外的包往返来建立 TCP 连接。

要比较通过 HTTP 请求与已建立的 WebSocket 连接发送数据所涉及的步骤,请参阅此答案中列出的步骤:websocket vs rest API for real time data?

这些其他参考资料也可能有用:

当函数被调用时进行服务器推送:Ajax或WebSocket?

对于推送通知,是否必须使用 WebSocket?

HTML5 WebSocket:Web可扩展性的巨大飞跃


谢谢!这真的很有帮助。提供的信息非常有用。 - JR Sahoo.'JS'
客户端无法通过http推送数据。可以通过Webhooks实现(在此阅读),其中客户端提供服务器一个URL,服务器可以在任何时候重复POST到该URL。通过这种方式,客户端向服务器注册回调URL,服务器可以随意进行POST操作。您可能也想在您的答案中提到这一点。 - Gabriel Staples
另外,请投票重新开放这个问题。 - Gabriel Staples
@GabrielStaples - 不要忘记 服务器发送事件(一种HTTP推送形式)。 - jfriend00
那么它与云流有何不同呢? - 2437850
@2437850 - 如果您对WebSocket与某些特定的云技术相比有具体问题,请编写自己的问题并描述您所询问的细节。 - jfriend00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接