使用WebSocket和NGINX构建实时Web应用

NGINX | 2014年7月21日

在博文《将 NGINX 用作 WebSocket 代理》中,我们讨论了如何使用 NGINX 代理WebSocket应用服务器。本文将探讨使用 WebSocket 创建实时应用时需要考虑的一些架构和基础设施问题,包括所需的组件以及系统的构建方式。

WebSocket 为 HTTP 增添交互性

HTTP非常适合基于请求/响应模式的Web应用。在这种模式下,通信始终由客户端发起请求,再由后端服务器响应。对于客户端与服务器之间采用更具交互性的消息式通信的Web应用,仅靠简单的HTTP无法满足需求。以往通过HTTP模拟全双工通信的方法较为复杂,并且存在许多缺点。WebSocket协议与WebSocket JavaScript接口相结合,可以更轻松地构建此类应用,同时减少数据传输量并降低延迟。

在客户端与服务器之间建立全双工套接字连接后,便可开发采用推送、轮询或流式通信的实时事件驱动型Web应用。使用WebSocket时,连接建立后,客户端或服务器均可发起通信。这支持多种类型的Web应用,包括网络游戏、聊天、股票行情跟踪和体育比分实时播报。

WebSocket的另一个用例是开发基于WebRTC的应用。WebRTC用于创建可在浏览器之间进行通信的应用。建立通信时需要单独的信令通道,而WebSocket是适合此用途的协议。

WebSocket应用的技术要求

WebSocket Web应用所需的最低基础设施包括:运行WebSocket JavaScript应用并与WebSocket服务器通信的客户端浏览器。目前,所有主流浏览器的最新版本均支持WebSocket,但仍需确保客户端使用支持WebSocket的浏览器。WebSocket服务器有多种选择,以下是适用于不同环境的一些示例(此列表仅为方便参考,并不代表NGINX, Inc.对其认可或推荐):

扩展WebSocket以应对高流量

可以使用单台WebSocket服务器,但应用性能会受到服务器容量的限制,而且该服务器也会成为单点故障。许多实时应用在开发时都希望得到广泛采用,但其增长速度往往难以预测。为支持实时应用日益普及,基础设施必须能够:

  • 扩展以支持大量并发用户
  • 在处理客户端与服务器之间的通信时提供低延迟
  • 支持高可用性(即不存在单点故障)
  • 支持轻松更改配置,以适应不断变化的条件

为此,可以将NGINX部署在WebSocket服务器和HTTP服务器前端(因为大多数WebSocket应用也使用HTTP),使其充当支持WebSocket的反向代理和负载均衡器。并非所有反向代理都直接支持WebSocket。例如,Amazon Web Services(AWS)环境中的Elastic Load Balancing(ELB)必须以TCP模式运行,因此无法处理HTTP标头。为解决这一限制,开发了Proxy Protocol,NGINX也支持该协议,因此AWS可全面支持WebSocket。使用NGINX作为WebSocket反向代理还可带来其他优势,例如灵活路由,以及由NGINX终止SSL连接的能力。

使用NGINX的典型WebSocket配置可能如下所示:

此处展示了多种桌面和移动客户端连接到一对高可用NGINX服务器,由这对服务器对一组HTTP和WebSocket服务器进行负载均衡。此类配置可承受一台WebSocket服务器或NGINX服务器发生故障,并可轻松添加或移除WebSocket服务器。此外,客户端无需了解连接WebSocket服务器的任何路由细节,从而构建稳健且可扩展的WebSocket应用基础设施。对于实时Web应用,Web性能和可靠性至关重要。立即联系我们,了解NGINX Plus如何帮助提升应用的性能、可靠性和可用性。

有关更多信息,请参阅:


分享

关于作者

Rick Nelson
Rick Nelson解决方案工程区域副总裁

Rick Nelson 的更多博客文章

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。