互联网的快速发展导致了对实时通信技术需求的增加,加强了客户端和服务器之间的通信,并对依赖于即时通信和直播的应用程序、界面和社交媒体平台产生了影响。WebSockets 越来越受欢迎,现已成为实现实时通信的最常用方法之一。然而,WebSockets 并不总是最佳选择,因为技术的选择取决于具体的用例,有许多替代选择可能更适合特定情况。
什么是 WebSocket?WebSocket 是一种通过网络在客户端和服务器之间提供全双工通信和双向通信通道的协议。它允许在客户端和客户端-服务器之间进行实时数据传输,而无需重新连接服务器。与传统的 HTTP 协议不同,WebSockets 使客户端和服务器可以随时启动通信和发送数据,因此非常适合实时数据传输。许多语言都提供 WebSocket API 库,用于通过 WebSockets 建立连接和交换信息。
为什么选择 WebSocket 替代方案?几乎每次开发人员考虑实时通信时,WebSockets 会是选择之一。为什么会这样?无论使用何种情况,它们都是实现实时传输的唯一/最佳选择吗?
简单地说,WebSockets 提供了先进的功能,但根据不同的使用情况,也会有许多缺点,这些缺点会迅速增加项目的复杂性。为了解决这个问题,让我们来看看开发人员为什么会选择 WebSocket 替代方案。
性能: WebSockets 以其先进的功能而闻名,但有时也会成为矫枉过正的解决方案,导致性能低下。在决定使用 WebSockets 时,必须考虑使用案例。例如,如果需要高并发连接,有比 WebSockets 更好的解决方案。WebSocket 连接必须在客户端和服务器之间保持激活状态,随着规模的扩大,服务器和底层基础架构的负载也会增加。
互操作性:所有现代Web浏览器/网络都支持 WebSockets。偶然地,如果该软件在旧版浏览器使用,则必须考虑该旧版系统是否支持 WebSockets。此外,网络和代理有时会完全阻止 WebSocket 连接,因此在哪里使用软件也是一个需要考虑的因素。
安全性: WebSockets 并不像某些替代方案那样安全,而且存在被恶意行为者利用的漏洞。WebSockets 被认为不如其他协议安全的一些原因包括跨站点 WebSocket 劫持和来源欺骗。
WebSocket 替代方案长轮询长轮询是一种客户端向服务器发送 HTTP/HTTPS 请求的方法,但客户端不会立即收到服务器的响应,而是需要保持 HTTP 连接。保持 HTTP 连接可使服务器在数据可用或达到超时阈值时稍后回复。收到响应后,客户端将立即发送后续请求。
长轮询无需 WebSockets 提供的双向通信通道就能实现实时通信。其核心区别在于,客户端将发送多个请求来重新建立与服务器的连接,而不是像 WebSockets 那样维护一个持久连接。
MQTTMQTT 是一种轻量级的发布-订阅式机器对机器网络协议,专为网络带宽有限的远程设备而设计。由于资源限制,智能传感器、可穿戴设备和其他物联网设备通常需要使用这种协议。虽然 WebSockets 可用于各种应用,但 MQTT 是明确为机器对机器通信而设计的,因此在这些使用案例中被视为一种替代方案。MQTT 具有开销低、消息传递效率高和支持离线操作等特点。
WebRTCWebRTC 是一个免费的开源项目,可为 Web 浏览器和移动设备提供实时通信。它由 C 和 JavaScript 编写,可为网络浏览器和移动设备提供实时通信。WebRTC 可直接从点对点流式传输音频和视频,无需服务器端连接或额外插件。对于实时流媒体、视频会议或群组通话等用例,这些功能可通过 HTML5 和 JavaScript 使用 WebRTC API 快速实现。总之,在这些使用案例中,WebRTC 的点对点特性有助于减少服务器负载,并提供比 WebSockets 更高效、更高质量的通信体验。
粉丝福利, 免费领取C/C 开发学习资料包、技术视频/项目代码,1000道大厂面试题,内容包括(C 基础,网络编程,数据库,中间件,后端开发,音视频开发,Qt开发,游戏开发,Linux内核等进阶学习资料和最佳学习路线)↓↓↓↓有需要的朋友可以进企鹅裙927239107领取哦~↓↓
WebTransport 与 WebSocketWebTransport 是一种新的 Web 通信协议,可在客户端和服务器之间提供低延迟、高吞吐量的连接。它的创建是为了解决传统协议(如 WebSockets)的一些局限性,并提供一种能更好地满足当今网络应用需求的现代替代方案。
WebSockets 通常以 HTTP/1.1 升级请求开始,而 WebTransport 则支持多种协议,包括 HTTP/2、HTTP/3 和 QUIC,并且是一种基于 UDP 的传输方式。此外,WebTransport 还支持通过其流 API 可靠地发送数据,以及通过其数据报 API 不可靠地发送数据。它与 WebSockets 相比有何优势?
高级功能: WebSockets 面临的一个挑战是很难通过单个连接发送不同类型的数据,如图像和文本。出现这个问题的原因是,数据被分成较小的单元(称为数据包),以便通过 TCP 连接传输。在将数据划分为数据包时,无法区分数据中包含的纯文本和编码图像。为了解决这个问题,WebSockets 通常需要在服务器和客户端之间建立两个独立的连接,一个用于图片,另一个用于文本。不过,WebTransport 提供了一种解决方案,即支持多个流(称为多路复用)。通过支持多数据流,开发人员可以通过一个连接发送不同类型的数据,从而减少建立和维护多个连接的开销。当服务器需要支持许多客户端时,这一点就变得至关重要。在 WebSockets 中,每个客户端有多个连接,当服务器开始扩展时,这可能会导致复杂性。
改进性能: WebTransport 是一种基于 UDP 的传输协议,比基于 TCP 的协议(如 WebSockets)性能更高。由于它基于 UDP,因此没有纠错或重传功能。纠错是指检测和纠正传输数据中可能出现的错误。重传是指通过网络重新发送丢失或损坏的数据包。由于没有纠错和重传的开销,这降低了 WebTransport 的延迟。WebTransport 还提供 WebTransportCongestionControl 配置,可优化请求的吞吐量和延迟。其次,通过 QUIC 握手与 WebTransport 建立新连接的速度通常比通过 TLS 的 TCP 更快。
可靠性: 由于缺乏纠错和重传功能,开发人员可能会认为 WebTransport 的可靠性不如 WebSockets。其实不然,WebTransport 在设计上就比 WebSockets 更可靠,尤其是在高带宽通信和具有挑战性的网络条件下。WebTransport 为可靠的单向(WebTransportReceiveStreams)或双向(WebTransportBidirectionalStream)数据传输提供了流 API。该 API 端点提供了诸如 WebTransportReliabilityMode 等配置,可让连接在必须进行可靠数据传输的情况下具有 TCP 回退功能。
安全性:WebTransport 提供比 WebSockets 更安全的协议。它默认提供端到端加密,确保客户端和服务器之间的数据在传输过程中不会被截获或修改。其中一个安全功能是使用 “Origin “标头,它为服务器提供了一种验证请求是否来自可信来源的方法。这有助于防止跨站请求伪造(CSRF)攻击。
服务器发送事件(SSE)服务器发送事件(SSE)是一种服务器推送技术,允许服务器通过单个 HTTP 连接向客户端推送数据。SSE 是一种简单、高效的协议,可用于向网页或应用程序发送实时更新,因此非常适合特定用例。传统的 HTTP 请求在一次响应后就会关闭连接,而 SSE 则不同,它会在服务器和客户端之间打开一个长期连接,允许服务器通过同一连接发送多个更新。与 WebSockets 的双向连接相比,服务器发送事件只是单向的。客户端只需启动连接和关闭连接。不过,服务器发送事件的功能集有限,因此更容易实现和调试。服务器发送事件是 EventSource API 的开端,这使得在网络浏览器中实现 EventSource API 变得更加容易。
WebSocket 协议及其替代方案(如 WebTransport)都是处理实时通信的重要解决方案。然而,无论选择哪种解决方案,都会在实施底层基础设施和扩展复杂性方面浪费时间。例如,在使用 Socket.io 等特定技术创建 WebSocket 服务器时,开发人员仍需在负载平衡器后面动态生成世界各地的服务器,以管理每个网络服务器的利用率。