在Azure工作者角色中使用SignalR

t0r*_*rus 12 azure-worker-roles signalr

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

显然,SignalR对于这种笨拙的轮询/排队方法看起来是一个非常有吸引力的替代方案,但是当我们讨论需要发送的多个工作者角色(而不是Web角色)时,我发现很少有关于如何执行此操作的指导个人或所有客户的身份.

该SignalR.WindowsAzureServiceBus 由克莱门斯vasters看起来极好,但留下一个有点高,干燥末即一个很好的例子,解决缺乏.

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

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

任何来自专家的意见将不胜感激.

bac*_*acr 6

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

  • 你有一个如何做到这一点的例子吗? (2认同)

el_*_*one 1

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

  • 谢谢@el_tone 看来网络角色必须使用 SignalR 发送到浏览器客户端。我的问题是必须发送的消息**源自_worker_角色**。如何从辅助角色获取此类消息。如果他们将这些消息放入服务总线队列中,则服务总线似乎需要由 Web 角色进行轮询。这种轮询正是人们首先要通过使用 SignalR 来避免的! (3认同)