#signalr #signalr-backplane
#сигналр #сигналр-объединительная плата
Вопрос:
Я использую SignalR для того, чтобы предоставлять браузеру сообщения RabbitMQ. Очевидно, что это прекрасно работает с одним экземпляром приложения. Вопрос в том, может ли он работать с несколькими экземплярами тоже без объединительной платы. Я понимаю, что клиент SignalR может быть отключен от модуля A и подключен обратно к модулю B, но в чем именно здесь проблема? Я в порядке, если потеряю некоторые сообщения во время повторного подключения. Это единственная проблема? Рассматривается ли повторное подключение к модулю B как обычное новое соединение, чтобы клиент просто снова подписался, как обычно, без повторного подключения? Или у системы нет входных параметров, которые были у нее при первоначальной подписке, и поэтому она не может повторно подписаться без подсказок?
Комментарии:
1. Вы используете SignalR для ASP.NET или Ядро?
Ответ №1:
Пока все ваши серверы SignalR получают одни и те же данные от RabbitMQ или получают только данные для подключенных к ним клиентов, вам не нужна объединительная плата.
Вам понадобится объединительная плата, если у вас есть одно из следующих:
- Клиенты могут общаться друг с другом.
- Один сервер SignalR подключен к RabbitMQ, но клиенты могут подключаться к нескольким серверам SignalR.
- Серверы SignalR подключены к разным очередям или получают разные данные из одной и той же очереди.
У меня аналогичная настройка с базой данных вместо RabbitMQ, и мне нужна объединительная плата, чтобы либо только один из серверов SignalR имел доступ к базе данных (и данные отправлялись всем клиентам), либо для совместного использования загрузки базы данных между серверами (и данные отправлялись всем клиентам). Таким образом, сервер, получающий данные, может отправить их клиенту, подключенному к другому серверу.
Я использую SignalR для ASP.NET и серверы не знают, кто подписан на другие серверы. Все сообщения отправляются через объединительную плату, и каждый сервер определяет, применяются ли они к своим подключенным клиентам. Это хорошо работает, например, с широковещательными передачами или если у одного и того же пользователя несколько клиентов, чтобы убедиться, что все они получают одни и те же данные независимо от сервера.