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

Nap*_*ime 6 signalr

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

Ale*_*ger 12

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

您正在配置的内容称为"Web园"(不要与"Web场"混淆),通常用于使错误的应用程序更具响应性(请参阅此SO问题).由于SignalR是从头开始构建的,考虑到可扩展性,因此这种配置不会给您带来任何好处.

我的建议是将工作进程限制为1.

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