假设我有2个股票代码服务器正在向网络浏览器客户端推送报价。 2台服务器位于负载均衡器(循环模式)之后。 请考虑以下情形:
客户A订阅Server1上的Google股票,如下所示:Groups.Add(Context.ConnectionId, "Google");
客户B订阅Server2上的Yahoo库存:Groups.Add(Context.ConnectionId, "Yahoo");
客户C订阅Server2上的Google股票:Groups.Add(Context.ConnectionId, "Google");
现在两台服务器已经与股票市场同步,因此当股票更新时,它们都会实时获得更新。
我的问题是:
当server2推送新的更新时:
Clients.Group("Google").tick(quote);
谁是将邮件发送给的客户?它会永远是客户C吗?我猜不是,我们之间有一个负载均衡器,所以在给定时间连接的客户端可能会改变,对吗?它现在可能是C,但接下来它可以是客户A& C或只有A.网络套接字的连接假设保持打开,那么负载均衡器将如何处理它,它是否总是将连接从1个客户端转发到特定的服务器?
背板在这里不会帮助我,因为我的2台服务器已经同步并且会同时发送相同的消息。所以,如果我强迫他们通过背板将消息路由到另一台服务器,最终会向客户端发送重复消息,如下所示:
server1在10:00向Google发送自动收报机X - >到背板的路线 - >路由到服务器2 server2在10:00向Google发送自动收报机X - >到背板的路线 - >路由到服务器1
服务器1向其客户发送2 X Google代码 服务器2向其客户发送2 X Google代码
答案 0 :(得分:0)
好的,最终我已经通过共享缓存(Redis)同步了所有组订阅,因此所有服务器都知道所有用户及其子目录。这样每个服务器都会知道他的当前客户端注册组,并将推送相关数据。
更新
经过深思熟虑后,这就是我们最终做的事情: