博客 | NGINX

使用 WebSocket 和 NGINX 的实时 Webapplications

NGINX-F5-horiz-black-type-RGB 的一部分
里克·尼尔森缩略图
里克·尼尔森
2014 年 7 月 21 日发布

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

WebSocket 为 HTTP 添加了交互性

HTTP 非常适合基于请求/响应的 Web应用,其中通信流总是由客户端发起请求,后端服务器对其进行响应。 客户端和服务器之间具有更具交互性、基于消息的交互的 Web应用需要一些超越简单 HTTP 的东西。 以前模拟 HTTP 全双工通信的尝试非常复杂并且存在许多缺点。 WebSocket 协议以及 WebSocket JavaScript 接口提供了一种更简单的方法来构建这些类型的应用,同时还减少了传输的数据量和延迟。

在客户端和服务器之间创建全双工套接字连接的能力允许开发利用推送、轮询或流通信的实时事件驱动的 Web应用。 使用WebSocket,客户端或服务器都可以在建立连接后发起通信。 这使得许多类型的网络应用成为可能,包括在线游戏、聊天、股票跟踪和体育比分的实时报告。

WebSocket 的另一个用例是开发基于WebRTC的应用。 WebRTC 用于创建进行浏览器到浏览器通信的应用。 它需要一个单独的信令通道来设置通信,而 WebSocket 是用于此的一个很好的协议。

WebSocketapplication的技术要求

WebSocket Web应用所需的最小基础设施是运行 WebSocket JavaScript应用并与 WebSocket 服务器通信的客户端浏览器。 所有主流浏览器的最新版本现在都支持 WebSocket,但重要的是确保客户端的浏览器支持 WebSocket。 WebSocket 服务器有很多选项,下面是针对不同环境的一些示例(此列表是为了您的方便而提供的,并不代表 NGINX, Inc. 的认可):

  Node.js红宝石
韋斯websocket-rails
socket.ioem-websocket
SockJSwebmachine-ruby
  
Perl雄猫
莫乔利西WebSocket 操作方法
网络::WebSocket::服务器
  
PHPWebLogic
棘轮在 WebLogic Server 中使用 WebSockets
PHP 推送 WebSocket 代码
PHP-Websockets
  
Python
网络套接字
ws4py

将 WebSocket 扩展到高流量

可以使用单个 WebSocket 服务器,但应用性能受到服务器容量的限制,这也是一个单点故障。 许多实时应用的开发都希望得到广泛应用,但很难预测其增长率。 为了支持实时应用的日益普及,基础设施必须能够:

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

这可以通过将 NGINX 放在 WebSocket 服务器和 HTTP 服务器前面来实现(因为大多数 WebSocket应用也使用 HTTP),以充当 WebSocket 感知的反向代理和负载平衡器。 并非所有反向代理都直接支持 WebSocket。 有些,例如 Amazon Web Services (AWS) 环境中的 Elastic Load Balancing (ELB),必须在 TCP 模式下运行,这意味着它们无法处理 HTTP 标头。 代理协议是为了解决这一限制而开发的,并且 NGINX 也支持它,这意味着 WebSocket 在 AWS 中完全得到支持。 使用 NGINX 作为 WebSocket 反向代理可以带来额外的好处,例如路由灵活性和让 NGINX 终止 SSL 连接的能力。

使用 NGINX 的典型 WebSocket 配置可能看起来像这样:

这里我们展示了各种桌面和移动客户端连接到一对高可用性的 NGINX 服务器,这些服务器正在对一组 HTTP 和 WebSocket 服务器进行负载均衡。 这种配置可以承受 WebSocket 服务器或 NGINX 服务器的故障,并且您可以轻松添加或删除 WebSocket 服务器。 此外,有关如何连接到 WebSocket 服务器的所有路由细节对客户端来说都是隐藏的,从而构成了健壮且可扩展的 WebSocket应用基础设施。 实时 Web应用的 Web 性能和可靠性至关重要。 立即联系我们,了解 NGINX Plus 如何帮助提高应用的性能、可靠性和可用性。

更多信息请参阅:


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”