SignalR 托管在单独的应用程序池上

Ami*_*ava 5 signalr

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

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

我不知道该怎么做。我使用 Hub 类构建了一个简单的聊天系统(很像Google Talk),与我的主 Web 项目绑定,客户端代码驻留在 Site Master 中,因为它将在整个应用程序中通用。

我还希望能够在 Hub 类之外调用 Hub 方法。例如,管理员可以从管理面板将某些任务分配给用户。因此,在成功完成服务操作(任务分配)后,我想从 Controller 方法向该特定用户发送一条SignalR消息。我应该使用集线器还是持久连接来实现这两个目标?在不同的端口上托管SignalR ?我希望得到一些有关这方面的指导。谢谢!

Dre*_*rsh 3

并不是说我认为你一定要这样做,但我可以理解分离的愿望。为此,您必须让 MVC 应用程序调用集线器方法,就像它本身是 SignalR 客户端一样。您可以通过在同一个集线器上放置单独的方法或添加专门用于此类应用程序间通信的辅助集线器来实现此目的。

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

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

       myPrimaryHubContext.Clients.systemAlert(message);
    }
}
Run Code Online (Sandbox Code Playgroud)