2012-10-06 23 views

回答

12

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

您正在配置的内容称为“网络园”(不要与“网上农场”混淆),并且通常用于使错误的应用程序响应更快(见this SO question)。由于SignalR建立在可扩展性的基础上,这种配置不会给您带来任何好处。

我的建议是保持工作进程限制为1

然而,有一种方法,使其与Web园工作:你需要使用外部消息总线像Redis的或Windows Azure的服务总线(详细信息请参见docs),以便在进程之间共享消息,这当然会引入额外的网络延迟。

+0

这完全回答了我的问题。我有内存泄漏问题,必须定期回收应用程序池。我和网上花园玩,看看它是否有帮助。谢谢。 – Naptime

+0

请使用文档的直接链接更新此答案,网址为:http://www.asp.net/signalr/overview/performance/scaleout-in-signalr。另外,我有一个反对意见:我不喜欢将工作进程限制为1的建议。使用超过1的确有好处。文档将向用户显示如何使其与不止1个工作进程一起工作,而无需限制他的选择。 – Icarus

+0

@lcarus谢谢,我添加了直接链接。尽管如此,我会离开我对一个工作流程的建议。虽然网络花园在某些使用情况下具有一些优势,但绝大多数用户不应该需要它。 –