WebSocket是一种用于实时数据同步的技术,尤其是在Web应用程序中,但它们只是可用于实时通信的几种方法之一。 Websocket的主要替代方法包括WEBRTC,服务器量事件(SSE)和传统的基于HTTP的方法,例如与轮询或长时间进行的REST相结合。每种方法都有独特的特征,优势和局限性,影响其对不同实时数据同步方案的适用性。
WebSockets概述
WebSocket通过单个TCP连接在客户端和服务器之间建立了一个持久的双向通信渠道。该连接的维持在初始握手之外,可以随时以最小的延迟和开销来回发送消息。 Websocket的关键特征:
- 持续连接:Websockets保持连接打开,通过消除重复的HTTP握手的需求来最大程度地减少延迟。
- 完整的双工通信:客户端和服务器都可以同时发送消息。
- 状态通信:该连接在其一生中保持状态,允许协调的消息交换而无需诉诸于无状态请求 - 响应周期。
- 有效载荷灵活性:Websocket支持二进制和文本数据格式,让应用程序传输复杂数据,例如JSON对象,图像或其他二进制流。
- 低延迟:小型标头和持续连接最小化消息的往返时间。
WebSocket对于需要连续,低延迟,双向通信(例如聊天服务,在线游戏,协作工具)以及来自金融或体育市场的实时数据更新等应用程序特别有效。
webrtc用于实时数据同步
WEBRTC(Web实时通信)是一项主要用于点对点通信的技术,它支持直接在浏览器或设备之间的实时音频,视频和数据流,而无需集中式服务器来继电器。当Websocket集中在客户服务器通信上时,WEBRTC启用了直接的设备对设备连接。关键方面包括:
- 点对点体系结构:允许客户之间的直接数据和媒体交换,在初始信号后绕过服务器。
- 媒体支持:与仅处理数据通信的Websocket不同,本地支持音频和视频的实时流以及数据。
- 安全性:WEBRTC中必须进行端到端加密,从而确保安全数据传输。
-NAT遍历:使用ICE,Stun和转弯协议纳入对NAT遍历的内置支持,以促进不同网络之间的连通性。
- 复杂的设置:需要信号服务器,会话协商和协调,然后再建立直接连接。
WEBRTC在用例中表现出色,要求高质量,低延迟的多媒体流和分散的数据共享,例如视频会议,实时事件,文件传输和面向同伴的应用程序。它还可以减少带宽和服务器负载,因为数据直接在参与者设备之间流动。
###服务器范围事件(SSE)
服务器范围的事件是使用单向通道的实时更新的更简单替代方法,服务器可以通过单个HTTP连接将数据推向客户端。 SSE的功能:
- 单向通信:仅支持服务器到客户的更新;客户无法使用相同的连接发送回消息。
- 简单实现:利用标准HTTP,不需要除流MIME类型之外的特殊协议。
- 自动连接:如果连接下降,则支持客户端的自动重新连接尝试。
- 仅文本:通常仅限于UTF-8文本数据,而不是二进制数据。
- 少开销:使用标准的HTTP机制,并且更易于与现有的HTTP基础架构集成。
SSE符合主要需要服务器驱动的实时更新的应用程序,例如新闻提要,股票股票或实时事件通知,而是除了接收消息之外不是交互式的。它比WebSocket更简单,有时更容易受到防火墙友好。
###传统http技术:投票和长轮调查
在WebSockets和SSE之前,经常使用重复的HTTP请求实现实时更新:
- 民意调查:客户端定期发送HTTP请求以向服务器询问更新。由于重复的请求导致高潜伏期和带宽的使用,这很简单,但效率低下。
- 长轮询:客户端发送HTTP请求,该请求服务器保持打开状态,直到有新数据可用或进行超时为止。然后,服务器响应,客户端立即发送另一个请求。与民意调查相比,长期的民意调查可降低潜伏期,但仍涉及重复的HTTP请求周期的明显开销。
这些较旧的方法无处不在,易于实施,但通常比Websockets或WebRTC进行实时通信的效率和响应率较低。
###将Websocket与替代方案进行比较
- 延迟和效率:由于连接持续的连接,网络插款提供的延迟低于HTTP方法,并且没有重复的HTTP标头开销。 WEBRTC可以使用UDP和灵活的交付模式来实现比Websocket的潜伏期更低,这使其适用于实时媒体和直接数据传输。 SSE提供了更简单的设置提供中等延迟,但仅支持服务器到客户的更新。
- 通信方向:Websocket提供完整的双工(双向)通信; WEBRTC可以实现对等双向交流; SSE仅是服务器对客户; HTTP轮询方法是客户介绍的,无状态的。
- 用例适应性:Websocket是聊天应用程序,多人游戏,协作编辑器以及需要连续双向通信的通用实时应用程序的理想选择。 WEBRTC是实时视频/音频会议,安全的P2P文件共享和Interactive实时流媒体的选择。当只需要服务器到客户数据的数据推动而没有复杂的交互时,SSE效果最好。
- 复杂性和实现:Websockets需要客户端和服务器支持,但实现相对简单。 WEBRTC需要其他信号基础架构和NAT遍历设置,使其更加复杂。使用常规HTTP,SSE最容易实施和调试。
- 可伸缩性和服务器加载:WEBRTC通过将数据传输转移到对等连接来减少服务器加载,尽管信号仍然需要服务器。 WebSockets依靠服务器来处理所有连接和消息,这些连接和消息可以规模扩大,但支持集中控制。 SSE和HTTP方法由于重复的连接或单向流媒体传输而在服务器上增加了更多负载。
- 安全性:Websockets使用SSL/TLS(WSS://)进行加密连接,但端到端加密取决于应用程序设计。 WEBRTC要求加密并合并用于媒体和数据的安全协议,从而增强隐私。 SSE继承了HTTP安全机制,但缺少HTTPS以外的内置加密。