在负载平衡环境中删除服务器

时间:2014-01-28 16:18:45

标签: c# asp.net signalr

我有两个使用Redis在负载均衡器后面运行的信号器asp.net服务器。

当我的用户连接并登录时,我在Redis中存储用户与其连接ID之间的关联。当我的用户注销/断开连接时,我删除了该关联。

当我将两台服务器中的一台脱机时,我的客户端会重新连接到另一台服务器。这会导致另一个关联,但是没有触发断开连接事件来清理已关闭服务器上的左侧关联。

这很重要,因为这意味着我无法再判断客户是否在线。

我应该如何编码才能处理被击落的服务器?

2 个答案:

答案 0 :(得分:0)

当客户端重新连接到仍处于活动状态的服务器时,是否会收到“OnReconnected”调用?当客户端重新连接到其他服务器时,您应该采取必要的修复关联。

你不能期望从被击落的服务器收到通知,它失败的原因可能很多。

答案 1 :(得分:0)

这是我采用的解决方案(我确信可以改进)

当客户端连接时,服务器将Redis的连接ID写入由服务器主机名键入的列表。

每个服务器每30秒运行一次任务,使用它的主机名和当前时间写入Redis。

每个服务器还会每30秒运行一次任务,检查未在X时间内更新其时间戳的服务器。

当发现服务器不再是#34;心跳"时,它会为已关闭的服务器提取连接ID并运行清理。