SignalR托管在单独的appPool上

时间:2012-08-03 06:55:25

标签: signalr

我的网络应用程序有一个基于 SignalR 集线器构建的聊天应用模块。

该应用将拥有 1000 + 并发用户。我想在一个单独的应用程序池上托管聊天模块,以将其与我的主应用程序分开,以便SignalR不会阻塞我的主应用程序。

我不确定该怎么做。我使用Hub类构建了一个简单的聊天系统(很像 Google Talk ),并且客户端代码驻留在Site Master中,因为它在整个应用程序中很常见。

我还希望能够在Hub类之外调用Hub方法。例如,管理员可能会从管理面板向用户分配特定任务。因此,在成功完成服务操作(任务分配)后的Controller方法中,我想向该特定用户发送 SignalR 消息。我应该使用Hub还是Persistence连接来实现这两个目标?在另一个端口上托管 SignalR ?我对此有一些指导。谢谢!

1 个答案:

答案 0 :(得分:3)

并不是说我认为你必须 来做这件事,但我能理解分开的愿望。要做到这一点,你必须让你的MVC应用程序调用集线器方法,就好像它是一个SignalR客户端本身。您可以通过在同一个集线器上放置单独的方法或添加仅用于此类应用程序间通信的辅助集线器来完成此操作。

我可能会使用后一种拥有第二个集线器的方法,因为您可以采用不同的方式保护它。如果你走这条路线,你只需得到主要枢纽的HubContext,然后拨打你想要的任何电话/发出你想要的任何信号。这可能看起来像这样:

public MyInterAppCommunicationHub : Hub
{
    public void SendSystemAlert(string message)
    {
       HubContext myPrimaryHubContext = GlobalHost.ConnectionManager.GetHubContext<MyPrimaryHub>();

       myPrimaryHubContext.Clients.systemAlert(message);
    }
}