Использование SignalR в рабочих ролях Azure - PullRequest
12 голосов
/ 04 марта 2012

У меня есть размещенное в Azure веб-приложение, которое работает вместе с несколькими экземплярами рабочей роли. В настоящее время веб-приложение передает работу этим работникам, помещая сообщения в очередь Azure, чтобы они могли их забрать. Рабочие передают сообщения о состоянии и прогрессе обратно, помещая сообщения в очередь «обратной связи». В настоящее время, чтобы информировать клиентов моего браузера о ходе работы, я выполняю периодические опросы на основе ajax в браузере для метода контроллера MVC, который, в свою очередь, читает очередь «обратной связи» Azure и возвращает эти сообщения в виде json обратно в браузер. .

Очевидно, что SignalR выглядит очень привлекательной альтернативой этому неуклюжему подходу к опросу / очереди, но я нашел очень мало рекомендаций о том, как это делать, когда мы говорим о нескольких рабочих ролях (в отличие от веб-роли) необходимо отправить статус отдельным или всем клиентам.

SignalR.WindowsAzureServiceBus от Clemens vasters выглядит превосходно, но оставляет его немного высоким и сухим в конце, т.е. отсутствует хороший пример решения.

Добавлен комментарий : Из моего чтения до сих пор кажется, что нет прямой связи от работника роли (в отличие от сети роли ) к клиенту браузера через подход SignalR возможно. Кажется, что работники должны общаться с веб-ролью, используя очереди. Это, в свою очередь, заставляет подход опроса, то есть очереди должны быть опрошены для сообщений от рабочих ролей - этот опрос должен исходить (извлекаться из) из браузера, в котором он появляется (как можно настроить цикл опроса в веб-роли?)

Таким образом, SignalR, , даже если SignalR.WindowsAzureServiceBus масштабирует подход Clemens Vasters, не может обрабатывать прямую связь от рабочей роли к браузеру.

Любые комментарии экспертов приветствуются.

Ответы [ 5 ]

6 голосов
/ 03 июля 2012

Вы можете использовать свои рабочие роли в качестве клиентов SignalR, чтобы они отправляли сообщения веб-роли (которая является сервером SignalR), а веб-роль, в свою очередь, будет пересылать сообщения клиентам.

1 голос
/ 23 января 2014

Если вы используете одну из объединительных плат SignalR, вы можете заставить своих сотрудников общаться с подключенными клиентами через ваше веб-приложение.

Как публиковать сообщения с помощью SignalR SqlMessageBus объясняет, как это сделать.

Он также ссылается на полностью обработанный пример , который демонстрирует один из способов сделать это.

1 голос
/ 12 июля 2012

Имейте в виду, мои знания об этих двух технологиях очень просты, я только начинаю. И я, возможно, неправильно понял ваш вопрос, но он кажется мне довольно очевидным:

Веб-роли могут подписываться на сервер очередей, где рабочая роль отправляет сообщение ?. В этом случае не было бы «вытягивания» клиента, служба очереди предоставила бы код на стороне веб-сервера с новым сообщением, и через SignalR вы бы отправили изменения на клиент без запросов клиента. Связь между сетью и работником останется прежней (что, на мой взгляд, является правильным способом сделать это).

1 голос
/ 14 марта 2012

Мы используем очереди служебной шины Azure для отправки данных нашим веб-ролям SignalR, которые затем пересылаются клиентам.Страницы CAT содержат очень хорошие примеры того, как настроить асинхронные циклы и отправку.

0 голосов
/ 01 ноября 2012

Альтернативные продукты шины сообщений, такие как NServiceBus, возможно, стоит изучить. NServiceBus имеет возможность доставлять сообщения асинхронно через границы процесса без необходимости опроса.

...