我有一个关于如何使 SSE 在多个服务器环境中工作的问题。
在 UI 中,有两个步骤:
1. source = new EventSource('http://localhost:3000/stream');
source.addEventListener('open', function(e) {
$("#state").text("Connected")
}, false);
UI 中的用户可以发布到 api 以更新数据
用户发布到 api 后,服务器正在向 UI 发送事件以更新 UI
在一个服务器环境中,这工作得非常好,完全没有问题。
但是在多服务器实例环境中,这是行不通的。例如,我有两个服务器实例,UI 订阅了服务器 1,那么服务器 1 记住了连接,但是数据更新是从服务器 2 来的,当数据发生变化时,服务器 2 中的 SSE 没有连接。那么在这个senario,服务器 2 如何将 SSE 发送到 UI?
为了让 SSE 在多个服务器环境中工作,我们是否需要采用任何保存方案来保存连接信息,以便任何服务器实例都能准确地将 SSE 发送到 UI?
让我再澄清一下:是的,服务 1 和服务 2 都位于负载均衡器之后,它们不必具有相同的 URL。UI 是纯前端应用程序,甚至可以是移动应用程序。所以,如果 UI 正在向 server1 的 LB 发送 eventSource 请求,那么只有这个实例可以使用这个连接将事件发送回 UI,对吗?但是如果我们有多个服务器 1 实例,这意味着除当前实例之外的任何服务器 1 实例都不能将事件发送回 UI。我相信这是 SSE 的限制,除非连接可以在所有实例之间共享。但是如何。
谢谢