如果IIS配置了多个工作进程,则SignalR丢失消息

时间:2012-10-06 06:57:03

标签: signalr

我使用1个工作进程IIS广播并接收所有消息。 将工作进程压缩到2,我只收到所有其他消息(丢失50%)。 是设计,配置还是错误?

1 个答案:

答案 0 :(得分:12)

这是设计的。两个工作进程不共享状态,客户端将在循环基础上分配,这意味着50%将连接到进程A,50%将连接到进程B.因为底层SignalR消息总线在 - 内存默认情况下,进程A看不到进程B的消息。

您正在配置的内容称为"网络花园" (不要与" web farm"混淆)并且通常用于使错误的应用程序更具响应性(参见this SO question)。由于SignalR是从头开始构建的,考虑到了可扩展性,因此这种配置不会给您带来任何好处。

我的建议是将工作流程限制保持在1。

然而,有一种方法可以使它与Web园一起工作:您需要使用外部消息总线,如Redis或Windows Azure Service Bus(详细信息可在docs中找到)进行共享进程之间的消息,这当然会引入额外的网络延迟。