Websocket
6 min
:headphones:websocket
基础设计
在 WebSocket 通信中,当两个用户连接到同一个 WebSocket 服务器时,服务器并不会直接“建立” WebSocket 连接,而是负责管理这些连接并允许它们进行通信。以下是详细的流程:
- 用户连接到服务器
- 握手过程
- 管理
- WebSocket 服务器会为每个连接分配一个唯一的标识符或管理对象。服务器会维护一个连接列表,方便管理和路由消息。
- 消息传递:
- 用户 A 可以通过其 WebSocket 连接发送消息到 WebSocket 服务器,服务器会接收到这个消息。
- 服务器将这个消息【路由】到用户 B 的 WebSocket 连接,用户 B 会接收到这个消息。
- 同样地,用户 B 的消息可以通过服务器转发到用户 A。
- 关闭连接:
- 当用户决定断开连接时,他们会发送一个关闭帧给服务器,服务器会接收到这个关闭请求并终止对应的 WebSocket 连接。
示例
假设有一个聊天室应用,其中用户 A 和用户 B 都连接到同一个 WebSocket 服务器:
- 用户 A 和 B 连接:
- 用户 A 发起 WebSocket 连接请求到服务器。
- 用户 B 发起 WebSocket 连接请求到服务器。
- 消息传递:
- 用户 A 在聊天室中发送一条消息。
- 这条消息通过 WebSocket 服务器转发到用户 B。
- 服务器处理:
- 服务器管理两个连接,并将消息从一个连接路由到另一个连接。
总结
WebSocket 服务器充当了通信的中介,确保了不同用户之间的消息能够正确传递。
- 每个用户与 WebSocket 服务器建立独立的连接。
- 服务器负责管理这些连接并路由消息。
- 用户之间的通信是通过服务器来实现的,而不是直接通过客户端到客户端的连接。
拓展设计
以下是如何将 RocketMQ 集成到 WebSocket 系统中的一些变化和流程
如果在 WebSocket 系统中引入 RocketMQ,主要的变化会体现在消息的传递和处理方式上。RocketMQ 是一个分布式消息队列系统,它提供了可靠的消息传递和存储功能,可以用于更复杂的消息处理场景。
1. 消息发布和订阅
- WebSocket 服务器: 仍然负责管理 WebSocket 连接和直接与客户端的通信。
- RocketMQ: 用于处理和路由消息。
流程变化:
- 用户连接和消息发送:
- 用户 A 和用户 B 通过 WebSocket 连接到 WebSocket 服务器。
- 用户 A 发送消息到 WebSocket 服务器。
- 消息发送到 RocketMQ:
- WebSocket 服务器将用户 A 发送的消息发布到 RocketMQ 的一个主题(Topic)。
- RocketMQ 负责将这个消息存储到消息队列中,并将其分发到订阅了这个主题的消费者。
- 消息消费:
- WebSocket 服务器作为 RocketMQ 的消费者之一,从 RocketMQ 消费消息。
- 服务器将从 RocketMQ 获得的消息转发给用户 B(如果消息目标是用户 B)。
- 消息传递到客户端:
- WebSocket 服务器通过 WebSocket 连接将消息发送到用户 B。
- 用户 B 接收到来自用户 A 的消息。
2. 消息持久化
- RocketMQ: 提供消息持久化功能,确保消息不会丢失,即使在系统故障时也能恢复。
- WebSocket: 不负责消息持久化,消息的状态和存储由 RocketMQ 处理。
3. 扩展性和负载均衡
- RocketMQ: 可以在多个 WebSocket 服务器之间进行负载均衡和消息分发,支持高并发和大规模消息处理。
- WebSocket: 可以将不同的 WebSocket 服务器实例连接到同一个 RocketMQ 集群,以实现更高的可扩展性和可靠性。
4. 实现示例
假设你在一个聊天应用中使用 WebSocket 和 RocketMQ:
- 用户 A 发送消息:
- 用户 A 通过 WebSocket 发送消息到 WebSocket 服务器。
- WebSocket 服务器将消息发送到 RocketMQ 的
chat主题。
- RocketMQ 处理消息:
- RocketMQ 将消息存储到队列中,并将其路由到所有订阅了
chat主题的消费者。
- RocketMQ 将消息存储到队列中,并将其路由到所有订阅了
- WebSocket 服务器消费消息:
- 另一个 WebSocket 服务器(或同一个服务器的不同实例)作为消费者从 RocketMQ 消费消息。
- 服务器将消息通过 WebSocket 发送给用户 B。
- 用户 B 接收到消息:
- 用户 B 通过 WebSocket 接收到来自用户 A 的消息。
5. 总结
将 RocketMQ 集成到 WebSocket 系统中,主要是将消息处理逻辑从 WebSocket 服务器移到 RocketMQ,这样可以利用 RocketMQ 的消息持久化、负载均衡和分布式处理能力。WebSocket 服务器仍然负责管理 WebSocket 连接和与客户端的通信,但消息的发布、订阅和存储由 RocketMQ 处理。这种设计可以提高系统的可靠性和扩展性,特别是在需要处理大量消息和用户时。