你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Web PubSub 如何支持 Socket.IO 库?
本文从工程角度介绍了如何使用 Web PubSub for Socket.IO 将自承载 Socket.IO 应用迁移到 Azure,只需更改最少的代码。 然后,可以利用简化的应用体系结构和部署,同时实现 100,000 个并发连接。 无需了解本文中的所有内容,就可以有效地将 Web PubSub 用于 Socket.IO。
自承载 Socket.IO 应用的体系结构
下图显示了自承载 Socket.IO 应用的典型体系结构。
为了确保应用可缩放且可靠,Socket.IO 用户通常具有涉及多个 Socket.IO 服务器的体系结构。 客户端连接分布在 Socket.IO 服务器之间,以平衡系统上的负载。
当开发人员需要向连接到不同服务器的客户端发送相同的消息时,设置多个 Socket.IO 服务器会带来挑战。 开发人员通常将此用例称为“广播消息”。
Socket.IO 库的官方建议是引入一个名为 适配器 的服务器端组件来协调 Socket.IO 服务器。 适配器确定客户端连接到的服务器,并指示这些服务器发送消息。
添加适配器组件会同时为开发和部署带来复杂性。 例如,如果体系结构使用 Redis 适配器,开发人员需要:
- 实现粘滞会话。
- 部署和维护 Redis 实例。
获取实时信道的工程工作量和时间分散了开发人员的注意力,让他们无法开发使应用或系统对用户独一无二且有价值的功能。
适用于 Socket.IO 的 Web PubSub 旨在为开发人员解决哪些问题
尽管开发人员经常报告设置使用 Socket.IO 库生成的可靠且可缩放的应用具有挑战性,但开发人员可以从直观的 API 和库支持的各种客户端中获益。 适用于 Socket.IO 的 Web PubSub 基于库带来的价值,同时减轻开发人员在可靠且大规模地管理持久连接方面的复杂性。
实际上,开发人员可以继续使用 Socket.IO 库的 API,而无需预配服务器资源来维护 WebSocket 或基于长轮询的连接,这可能会占用大量资源。 此外,开发人员无需管理和部署适配器组件。 应用服务器只需发送单个操作,web PubSub for Socket.IO 会将消息广播到相关客户端。
工作原理
web PubSub for Socket.IO 通过实现适配器和 Engine.IO,基于 Socket.IO 协议构建。 下图显示了将 Web PubSub 用于 Socket.IO 与 Socket.IO 服务器时的典型体系结构。
与自承载 Socket.IO 应用一样,仍需要在自己的服务器上托管 Socket.IO 应用程序逻辑。 但是,使用 Web PubSub for Socket.IO 服务:
- 服务器不再直接管理客户端连接。
- 客户端与服务建立持久连接, (客户端连接) 。
- 服务器还会与服务建立持久连接 (服务器连接) 。
当服务器逻辑使用 send to client
、 broadcast
和 add client to rooms
时,这些操作将通过建立的服务器连接发送到服务。 来自服务器的消息将转换为 Socket.IO 客户端可以理解的 Socket.IO 操作。 因此,任何现有的 Socket.IO 实现都可以工作,而无需进行重大修改。 需要进行的唯一修改是更改客户端连接到的终结点。 有关详细信息,请参阅 迁移自承载 Socket.IO 应用以在 Azure 上完全托管。
当客户端连接到服务时,该服务:
- 将 Engine.IO 连接 (
connect
) 转发到服务器。 - 处理客户端连接的传输升级。
- 将所有 Socket.IO 消息转发到服务器。