【问题标题】:Using SignalR in Azure Worker Roles在 Azure 辅助角色中使用 SignalR
【发布时间】:2012-03-04 08:26:49
【问题描述】:

我有一个 Azure 托管的 Web 应用程序,它与多个辅助角色实例一起工作。目前,Web 应用程序通过将消息放入 Azure 队列以供工作人员获取,从而将工作传递给这些工作人员。工作人员通过将消息放入“反馈”队列来传递状态和进度消息。目前,为了通知我的浏览器客户端进度,我在浏览器中对 MVC 控制器方法进行基于 ajax 的定期轮询调用,该方法依次读取 Azure“反馈”队列并将这些消息作为 json 返回给浏览器.

显然,对于这种笨拙的轮询/排队方法,SignalR 看起来是一个非常有吸引力的替代方案,但是当我们谈论多个工作角色(而不是 Web 角色)时,我几乎没有找到关于如何执行此操作的指导需要向个人或所有客户发送状态。

SignalR.WindowsAzureServiceBus by Clemens vasters 看起来很棒,但在最后留下了一个有点高和干燥,即缺乏一个好的示例解决方案。

添加评论:从我目前的阅读来看,似乎没有来自 worker 角色的直接通信(相对于 web 角色)通过 SignalR 方法连接到浏览器客户端是可能的。似乎工作人员必须使用队列与 Web 角色进行通信。这反过来又强制采用轮询方法,即必须轮询队列以获取来自工作角色的消息 - 此轮询必须源自(驱动)来自它出现的浏览器(如何在 Web 角色中设置轮询循环?)

总之,SignalR,即使使用 Clemens Vasters 的 SignalR.WindowsAzureServiceBus 横向扩展方法,也无法处理从工作角色到浏览器的直接通信。

任何来自专家的 cmet 将不胜感激。

【问题讨论】:

  • 您能够传递工作者角色的最轻量级方式是什么 => webrole => 客户端浏览器?
  • 正如 bacr 所回答的。我也有多个工作角色作为客户端运行,并且 webrole 控制它们。

标签: azure-worker-roles signalr


【解决方案1】:

您可以将您的工作角色用作 SignalR 客户端,因此它们会将消息发送到 Web 角色(即 SignalR 服务器),然后 Web 角色会将消息转发给客户端。

【讨论】:

  • 你有如何做到这一点的例子吗?
  • 对这个答案投了反对票,因为就目前而言,它没有增加任何价值。
【解决方案2】:

我们使用 Azure 服务总线队列将数据发送到我们的 SignalR Web 角色,然后转发给客户端。 CAT pages 有很好的例子来说明如何设置异步循环和发送。

【讨论】:

  • 谢谢@el_tone 似乎网络角色必须使用 SignalR 发送到浏览器客户端。我的问题是必须发送的消息源自worker角色。如何从工作角色获取此类消息。如果他们将这些消息放在服务总线队列中,那么服务总线似乎需要由 Web 角色轮询。这种轮询是人们一开始就试图通过使用 SignalR 来避免的!
  • @t0rus:服务总线队列可以在阻塞模式下运行,即没有轮询。队列读取在设置的超时(例如 24 小时)或收到消息时返回。在此阻止 IIS 线程是不行的,但是对于任务,开销似乎可能很低。想知道开销是否可以更低......
  • 链接好像挂了。
【解决方案3】:

请记住,我对这两种技术的了解非常基础,我才刚刚开始。我可能误解了你的问题,但对我来说似乎很明显:

Web 角色能够订阅工作角色存放消息的队列服务器?如果是这样,就不会有客户端“拉动”,队列服务将为 Web 服务器端代码提供一条新消息,并且通过 SignalR,您将在不涉及客户端请求的情况下将更改推送到客户端。 web 和 worker 之间的通信将保持不变(在我看来,这是正确的做法)。

【讨论】:

    【解决方案4】:

    如果您使用 SignalR 横向扩展背板之一,您可以让工作人员通过您的 Web 应用程序与连接的客户端交谈。

    How to publish messages using the SignalR SqlMessageBus 解释了如何做到这一点。

    它还链接到一个完整工作的example,它演示了一种执行此操作的方法。

    【讨论】:

      【解决方案5】:

      NServiceBus 等替代消息总线产品可能值得研究。 NServiceBus 能够跨进程边界异步传递消息,而无需轮询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-24
        • 1970-01-01
        • 1970-01-01
        • 2013-08-07
        • 2011-08-22
        • 2014-11-09
        相关资源
        最近更新 更多