5

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

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

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

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

4

1 回答 1

3

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

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

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

       myPrimaryHubContext.Clients.systemAlert(message);
    }
}
于 2012-08-08T16:09:39.893 回答