消息代理在 websocket 通信中的目的?
Purpose of message brokers in websocket communication?
我正在实施用于协作编辑的 websockets。为此,我使用了 Spring 5 个 websockets。
最简单的例子是,两个 Web 客户端通过 websockets 连接到我的服务器。用户 1 执行了一些创建事件并将此事件信息发送到我的服务器的操作。现在必须将此事件发送给用户 2,以便他们可以进行适当的 UI 更改。
我这里有两个问题:
- 由于此服务器将有多个实例 运行,用户 1 可能会连接到服务器 1,用户 2 可能会连接到服务器 2。在这种情况下,用户 1 所做的更改将如何传递给用户2 ?
- 此外,我正在关注 this tutorial。本教程在没有任何消息代理的情况下实现 websockets,一些教程另外使用消息代理(主要是 amqp)。在这种情况下,消息代理的意义何在?是不是因为消息太多,服务器会一条一条处理?
只是想补充一点:我们不能在客户端使用点对点连接,因为服务器需要为将来存储数据。
默认情况下 spring 5 在内存中为所有连接使用简单的 stomp 代理
如果你想水平扩展你需要一个像 RabbitMQ 等消息代理。
让我们想象一下 user1 和 user2 连接到 server1 而 user3 连接到 server2 的情况。当 user1 向 user3 发送消息时,它不会知道 user3,因为 server1 不知道 user3。
如果我们有经纪人,这个问题就会得到解决。
因此需要可扩展性来处理负载,在生产中你总是会有 1 个以上的实例来实现高可用性和容错。
我正在实施用于协作编辑的 websockets。为此,我使用了 Spring 5 个 websockets。
最简单的例子是,两个 Web 客户端通过 websockets 连接到我的服务器。用户 1 执行了一些创建事件并将此事件信息发送到我的服务器的操作。现在必须将此事件发送给用户 2,以便他们可以进行适当的 UI 更改。
我这里有两个问题:
- 由于此服务器将有多个实例 运行,用户 1 可能会连接到服务器 1,用户 2 可能会连接到服务器 2。在这种情况下,用户 1 所做的更改将如何传递给用户2 ?
- 此外,我正在关注 this tutorial。本教程在没有任何消息代理的情况下实现 websockets,一些教程另外使用消息代理(主要是 amqp)。在这种情况下,消息代理的意义何在?是不是因为消息太多,服务器会一条一条处理?
只是想补充一点:我们不能在客户端使用点对点连接,因为服务器需要为将来存储数据。
默认情况下 spring 5 在内存中为所有连接使用简单的 stomp 代理 如果你想水平扩展你需要一个像 RabbitMQ 等消息代理。 让我们想象一下 user1 和 user2 连接到 server1 而 user3 连接到 server2 的情况。当 user1 向 user3 发送消息时,它不会知道 user3,因为 server1 不知道 user3。 如果我们有经纪人,这个问题就会得到解决。 因此需要可扩展性来处理负载,在生产中你总是会有 1 个以上的实例来实现高可用性和容错。