12

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

显然,对于这种笨拙的轮询/排队方法,SignalR 看起来是一个非常有吸引力的替代方案,但是当我们谈论需要发送的多个工作角色(而不是 Web 角色)时,我发现如何去做这件事的指导很少个人或所有客户的状态。

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

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

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

专家的任何意见将不胜感激。

4

5 回答 5

6

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

于 2012-07-03T14:06:28.733 回答
1

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

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

于 2012-07-12T18:55:46.413 回答
1

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

如何使用 SignalR SqlMessageBus 发布消息说明了如何执行此操作。

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

于 2014-01-23T19:36:58.317 回答
1

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

于 2012-03-14T13:58:18.670 回答
0

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

于 2012-11-01T07:34:46.893 回答