WebSocket 的优点
WebSocket 解决了 REST 或 HTTP 的一些问题 -
双向
HTTP 是一种单向协议,客户端始终发起请求。服务器处理并返回响应,然后客户端使用它。WebSocket 是一种双向协议,其中没有预定义的消息模式,例如请求/响应。客户端或服务器都可以向对方发送消息。
全双工
HTTP 允许请求消息从客户端发送到服务器,然后服务器向客户端发送响应消息。在给定时间,客户端正在与服务器交谈,或者服务器正在与客户端交谈。WebSocket 允许客户端和服务器相互独立地交谈。
单 TCP 连接
通常,为 HTTP 请求启动一个新的 TCP 连接,并在收到响应后终止。需要为另一个 HTTP 请求/响应建立新的 TCP 连接。对于 WebSocket,HTTP 连接使用标准的 HTTP 升级机制进行升级,客户端和服务器在 WebSocket 连接的生命周期内通过同一个 TCP 连接进行通信。
下面给出的图表显示了处理 N 条消息所需的时间(以毫秒为单位)以获得恒定的有效负载大小。
这是提供此图表的原始数据 -
上面给出的图表和表格显示,REST 开销随着消息数量的增加而增加。这是真的,因为需要启动和终止许多 TCP 连接,并且需要发送和接收许多 HTTP 标头。
最后一列特别显示了满足 REST 请求的时间量的乘数。
第二张图显示了通过改变有效负载大小来处理固定数量的消息所花费的时间。
这是提供此图表的原始数据 -
此图显示处理 REST 端点的请求/响应的增量成本是最小的,并且大部分时间都花在连接启动/终止和遵守 HTTP 语义上。
结论
WebSocket 是一种低级协议。一切,包括一个简单的请求/响应设计模式,如何创建/更新/删除需要的资源,状态码等都建立在它之上。所有这些都是为 HTTP 定义的。
WebSocket 是有状态协议,而 HTTP 是无状态协议。WebSocket 连接可以在单个服务器上垂直扩展,而 HTTP 可以水平扩展。WebSocket 水平扩展有一些专有的解决方案,但它们不是基于标准的。HTTP 附带了许多其他好处,例如缓存、路由和多路复用。所有这些都需要在 WebSocket 之上定义。