【发布时间】:2016-01-15 13:19:10
【问题描述】:
假设我有 2 个股票行情服务器,它们将报价推送到 Web 浏览器客户端。 2 个服务器位于负载均衡器后面(循环模式)。 考虑以下场景:
客户端 A 在 Server1 上订阅 Google 股票,如下所示:
Groups.Add(Context.ConnectionId, "Google");客户端 B 在 Server2 上订阅雅虎股票:
Groups.Add(Context.ConnectionId, "Yahoo");客户端 C 在 Server2 上订阅 Google 股票:
Groups.Add(Context.ConnectionId, "Google");
现在两台服务器已经与股票市场同步,因此当股票更新时,它们都会实时获得更新。
我的问题是:
当 server2 像这样推送新的更新时:
Clients.Group("Google").tick(quote);
它将向谁发送消息?它总是客户C吗?我猜不是,我们之间有一个负载均衡器,所以在给定时间连接的客户端可能会改变,对吧?现在可能是 C,但下一个选项可能是客户端 A&C 或仅 A。Web 套接字的连接假设保持打开状态,那么负载均衡器将如何处理它,它是否总是将连接从 1 个客户端转发到特定服务器?
背板在这里帮不了我,因为我的 2 个服务器已经同步并且会同时发送相同的消息。所以如果我强迫他们通过背板将他们的消息路由到另一台服务器,它最终会向客户端发送重复的消息,如下所示:
server1 在 10:00 将代码 X 发送给 Google --> 路由到背板 --> 路由到服务器 2 server2 在 10:00 将代码 X 发送给 Google--> 路由到背板 --> 路由到服务器 1
服务器 1 向他的客户发送 2 X Google 代码 服务器 2 向他的客户发送 2 X Google 代码
【问题讨论】: