【问题标题】:Replacing PubNub with SignalR - Help on design用 SignalR 替换 PubNub - 设计帮助
【发布时间】:2013-07-16 10:22:06
【问题描述】:

现在我正在使用 PubNub 让我的网络应用程序进行通信。我有两个不同的应用程序通过 JS 接收消息(所以只听)和至少三个不同的应用程序(两个 Web 和一个工作人员)发送消息(服务器到客户端)。

所以,对于 PubNub,事情非常简单,从代码隐藏我对他们的服务器进行休息调用,我的 JS 客户端接收消息。我想用 SignalR 复制它,但我需要检查我要使用的设计/架构。

我正计划创建一个运行 SignalR 服务器的 .Net Web 应用程序。这里我创建 Hub,在 Global.asax 中配置路由(RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true }))。这将部署在 sr.mydomain.com 上。

JS 客户端(部署为 client1.mydomain.com 和 clientx.mydomain.com)可以轻松监听 sr.mydomain.com 设置 $.connection.hub.url 发送的消息

到目前为止,一切都很好,经过编码、测试并且正在运行。

重点是如何从 webapp.mydomain.com 和 MyWorkerRole 向 JS 客户端发送消息。我正在考虑在 sr.mydomain.com 上创建一个可以从 webapp.mydomain.com 和 MyWorkerRole 使用的 webmethod。所以 MyWorkerRole 调用 sr.mydomain.com 上的 webmethod,sr.mydomain.com 将消息发送到 client1.mydomain.com。这有意义吗?有更好更直接的方法吗?

【问题讨论】:

  • 只是在想,迁移到 SignalR 的原因是什么?这是 PubNub 的扩展问题吗?您是否需要一些 PubNub 无法提供的自定义功能?

标签: signalr


【解决方案1】:

您的方法适用于单服务器模式。如果您必须将 sr.mydomain.com 扩展到多个实例,那么明显的问题是信号器客户端可能未连接到接收 Web 服务调用的节点。

如果需要支持横向扩展,可以使用 SQL Server、Azure 服务总线或 Redis 作为背板。见:http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-in-signalr

50K 英尺的视图是这样的:

  1. 照常创建从 SignalR Hub 派生的集线器。
  2. 在事件生产者(网络角色)和消费者端(您的工作角色等)上,初始化信号器以使用背板。当然,在 web 应用程序中,您可以将其粘贴在 Global.asax 以及 MapHubs 调用中。

    GlobalHost.DependencyResolver.UseRedis(redisServer, redisPort, redisPassword, key);
    
  3. 在生产者端(工人角色),您可以获得IHubContext,如下所示:

    var hubContext =
            GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
    

    现在您可以使用hubContext.Clients 发送消息。与扩展名UseRedis类似,还有其他扩展名如UseServiceBus

【讨论】:

  • 注释覆盖可用:GlobalHost.DependencyResolver.UseRedis(new RedisScaleoutConfiguration(connectionString, key)) - 对 Azure 有用
猜你喜欢
  • 1970-01-01
  • 2011-01-16
  • 2023-03-22
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2011-04-21
相关资源
最近更新 更多