Подтвердить что ты не робот

Использование Redis с SignalR

У меня есть приложение ASP.NET MVC, которое выполняется на сервере A и некоторых веб-сервисах, которые выполняются на сервере B. Я реализовал уведомления в режиме реального времени, для которых я использовал SignalR на сервере A. Но теперь мне нужен сервер B для также может отправлять сообщения в представление, поданное с сервера A (основное веб-приложение). Следовательно, я пытаюсь использовать здесь для подключения объединительной платы Redis.

В моем запуске на сервере A я добавил следующее:

GlobalHost.DependencyResolver.UseRedis("localhost", 6379, string.Empty, "abc");
app.MapHubs();

Здесь я предполагаю, что "myApp" указывает канал, и когда я запускаю publish abc "hello world" на консоли Redis, я могу подсчитать количество подписчиков, возвращенное как 1, но я не могу понять, как взаимодействует концентратор SignalR с канал. Где я могу получить сообщение на сервере/представлении? Можем ли мы подписаться только на один канал redis? Не можем ли мы динамически настроить подписку на определенный канал?

EDIT: я могу видеть сообщения, отправленные из чата. Приложение реализовано с помощью SignalR на консоли redis, если я подписался на abc.

Также на данный момент я реализовал свой собственный redis-прослушиватель на сервере A, который при получении сообщения из redis-канала вызывает функцию-концентратор signalR. Я уверен, что должен быть другой способ сделать это, и я надеюсь, что объединительная плата redis может мне помочь, но не знаю, как это работает.

4b9b3361

Ответ 1

Объединительная плата распределяет сообщения между серверами.

GlobalHost.DependencyResolver.UseRedis("localhost", 6379, string.Empty, "abc");

Здесь abc - это канал redis, что означает, что какой-либо сервер подключен к серверу redis с этим каналом, они будут обмениваться сообщениями. Канал (группа) SignalR отличается от канала Redis. Вы также можете передавать сообщения канала (группы) SignalR.

Затем просто установите Microsoft.AspNet.SignalR.Redis NuGet на свои серверы.

Подключите свои серверы к Redis следующим образом:

 GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
 app.MapSignalR();

Затем используйте свой signalr, как и раньше. Вам не нужно ничего делать.

Когда сервер A отправляет сообщение клиентам, он сначала отправит сообщение в Redis. Затем Redis передаст сообщение всем абонентам (серверы A и B). Затем A и B отправят сообщение своим клиентам. (И наоборот, true, это будет так же, если B отправляет сообщение).

Скажем, A отправляет сообщение клиентам. _context.Clients.All.TestMessage("Hello");

Это будет первым, чтобы redis и redis разделит это с A и B.

Затем оба A и B отправят это сообщение своим клиентам.

_context.Clients.All.TestMessage("Hello");

Но вам не нужно беспокоиться об этих вещах. Я сказал раньше. Установите пакет, подключите серверы к redis и используйте signalr, как и раньше.

Если мы примем ваш вопрос. Ответ: Да. Сервер B может отправлять сообщения клиентам сервера A с помощью объединительной платы Signalr.

Это изображение суммирует то, что я сказал:

введите описание изображения здесь