【问题标题】:SignalR hosting on separate appPoolSignalR 托管在单独的 appPool 上
【发布时间】:2012-08-03 06:55:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • 是什么让您认为它会“限制您的主应用程序”?最好研究如何跨服务器扩展应用程序,而不是在一台服务器上增加额外的、不必要的通信开销。

标签: signalr


【解决方案1】:

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

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

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

       myPrimaryHubContext.Clients.systemAlert(message);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多