【发布时间】:2012-10-06 06:57:02
【问题描述】:
我使用 1 个工作进程 IIS 广播和接收所有消息。 将工作进程提高到 2,我只收到其他所有消息(丢失 50%)。 是设计、配置还是错误?
【问题讨论】:
标签: signalr
我使用 1 个工作进程 IIS 广播和接收所有消息。 将工作进程提高到 2,我只收到其他所有消息(丢失 50%)。 是设计、配置还是错误?
【问题讨论】:
标签: signalr
这是设计使然。两个工作进程不共享状态,客户端将在它们之间循环分配,这意味着 50% 将连接到进程 A,50% 将连接到进程 B。由于底层 SignalR 消息总线在内存中默认情况下,进程 A 看不到来自进程 B 的消息。
您正在配置的内容称为“网络花园”(不要与“网络农场”混淆),通常用于使有故障的应用程序响应更快(请参阅this SO question)。由于 SignalR 从头开始构建时考虑了可扩展性,因此此配置不会给您带来任何好处。
我的建议是将工作进程限制保持在 1。
但是,有一种方法可以使其与网络花园一起使用:您需要使用外部消息总线,如 Redis 或 Windows Azure 服务总线(详细信息可在 docs 中找到)在进程之间共享消息,这当然会引入额外的网络延迟。
【讨论】: