SignalR 结合负载均衡器丢失消息

SignalR combined with load balancer missing messages

我在硬件防火墙后面有 2 个 Web 服务器 (IIS 8.5),我们的应用程序使用 SignalR 进行一些实时更新。我们正在使用 SQL 服务器作为背板,以帮助我们在这种负载平衡环境中工作。此外,我们在负载均衡器上使用粘性会话来帮助我们在用户会话期间将用户保持在同一网络服务器上。当我们在这种硬件配置中 运行 时,我们至少会丢失 1/3 的消息。有时我们会收到所有预期的消息,但更多时候我们会错过很多消息。

当我们 运行 在单个网络服务器上时,所有消息都会收到。有人对解决此问题有任何建议吗?我们已经打开了日志(客户端和服务器),看起来没有任何东西丢失或损坏。我们真的很困惑。

编辑---

一些额外的细节,我希望能说明情况。

在两台服务器上的 web.config 中指定相同的 machineKey

终于解决了这个问题。确实有两个问题。首先是我们在上面的编辑中提到的使用内存中的用户列表。一旦我们意识到它不能跨机器工作,我们就将其删除。这也让我们想到了第二个问题,即 SignalR 2 如何使用 IUserIdProvider 而我们的调用应该是

Clients.User(userId).send(message)

而不是

context.Clients.Client(connection)

自从我们多年前开始使用 SignalR 以来,此代码就已经存在,并且在我们升级 SignalR 版本时从未得到正确更新