在Azure工作者角色中使用SignalR

时间:2012-03-04 08:26:49

标签: azure-worker-roles signalr

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

显然,SignalR看起来是一个非常有吸引力的替代这种笨拙的民意调查/排队方法,但是当我们谈论多个工人角色(而不是网络角色)时,我发现很少有关于如何执行此操作的指导需要向个人或所有客户发送状态。

SignalR.WindowsAzureServiceBus by Clemens vasters看起来很棒,但最后留下了一点点干,但是缺少一个很好的示例解决方案。

添加了评论:从我的阅读到目前为止,似乎没有来自 worker 角色的直接通信(而不是 web < / em> role)可以通过SignalR方法访问浏览器客户端。工作人员似乎必须使用队列与Web角色进行通信。这反过来会强制轮询方法,即必须轮询来自工作者角色的消息的队列 - 这种轮询必须从它出现的浏览器中发起(从中驱动)(如何在Web角色中设置轮询循环?)

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

非常感谢专家的意见。

5 个答案:

答案 0 :(得分:6)

您可以将您的辅助角色用作SignalR客户端,这样他们就会向Web角色(即SignalR服务器)发送消息,而Web角色则会将消息转发给客户端。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

Web角色能够订阅工作者角色存放消息的队列服务器吗?如果是这样,就没有客户端“拉”,队列服务将为Web服务器端代码提供新消息,并且通过SignalR,您可以将更改推送到客户端而不涉及客户端请求。网络和工作者之间的沟通将保持不变(在我看来,这是正确的方式)。

答案 3 :(得分:1)

如果您使用的是SignalR横向扩展背板,您可以通过Web应用程序让工作人员与已连接的客户端进行通信。

How to publish messages using the SignalR SqlMessageBus解释了如何执行此操作。

它还链接到一个完全有效的example,它演示了一种方法。

答案 4 :(得分:0)

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