Как уменьшить SignalR ChannelReader? - PullRequest
       24

Как уменьшить SignalR ChannelReader?

0 голосов
/ 29 октября 2018

Я использую SignalR 1.0.4 и имею концентратор, который возвращает ChannelReader, созданный из наблюдаемого расширением .

Клиент машинописного текста (также 1.0.4) вынужден подключаться только через веб-сокеты, и данные из этого канала в порядке.

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

Я попытался воспроизвести это с помощью SignalRSamples , реплицировав проект и предоставив копии различных IP-адресов хоста для эмуляции 2 экземпляров с балансировкой нагрузки. Я добавляю одно и то же соединение Redis к обоим проектам и запускаю оба.

Обычные подключения к веб-сокетам через hubs.html без проблем передают данные между экземплярами. Streaming.html не реплицирует данные для наблюдаемого или читателя канала.

Должны ли считыватели каналов использоваться таким образом, т. Е. Могут ли они масштабироваться?

1 Ответ

0 голосов
/ 29 октября 2018

ChannelReaders предназначены для потоковой передачи данных до вызывающей стороны метода. Они вообще не участвуют в масштабировании. Рассматривайте их так же, как стандартные возвращаемые значения, SignalR просто поддерживает перечисление элементов со временем. Модель программирования очень похожа на работу итераторов в C # (методы, использующие ключевое слово yield). Если вы хотите передавать сообщения другим клиентам, вам просто нужно использовать свойство Clients в базовом классе Hub и отправлять сообщения этим клиентам.

...