【问题标题】:SignalR lost messages if IIS configure with more than 1 worker process如果 IIS 配置超过 1 个工作进程,SignalR 会丢失消息
【发布时间】:2012-10-06 06:57:02
【问题描述】:

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

【问题讨论】:

    标签: signalr


    【解决方案1】:

    这是设计使然。两个工作进程不共享状态,客户端将在它们之间循环分配,这意味着 50% 将连接到进程 A,50% 将连接到进程 B。由于底层 SignalR 消息总线在内存中默认情况下,进程 A 看不到来自进程 B 的消息。

    您正在配置的内容称为“网络花园”(不要与“网络农场”混淆),通常用于使有故障的应用程序响应更快(请参阅this SO question)。由于 SignalR 从头开始​​构建时考虑了可扩展性,因此此配置不会给您带来任何好处。

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

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

    【讨论】:

    • 这正好回答了我的问题。我有内存泄漏问题,必须定期回收应用程序池。我玩网络花园,看看它是否有帮助。谢谢。
    • 请使用文档的直接链接更新此答案,该文档位于:asp.net/signalr/overview/performance/scaleout-in-signalr。此外,我有一个反对意见:我不喜欢将工作进程限制保持在 1 的建议。使用超过 1 肯定有好处。文档将向用户展示如何使其与超过 1 个工作进程一起工作,而无需限制他的选择。
    • @lcarus 谢谢,我添加了直接链接。不过,我会留下我对一个工作进程的建议。虽然网络花园在某些用例中具有一些优势,但绝大多数用户不应该需要它。
    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2015-06-12
    • 2017-07-27
    相关资源
    最近更新 更多