#websocket #signalr
#веб-сокет #signalr
Вопрос:
Я сопоставляю пользователей с подключениями, как описано в следующей ссылке https://learn.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/mapping-users-to-connections таким образом, я могу найти, какому пользователю отправлять сообщения.
Мне было интересно, требуется ли какая-либо дополнительная работа для бесперебойной работы на многоузловых серверах / балансировки нагрузки. Я не разбираюсь в инфраструктуре, но я предполагаю, что если будет развернуто несколько серверов, будет несколько статических хэш-карт, хранящих сопоставления пользователей с подключениями, то есть по одному для каждого сервера.
Означает ли это, что пользователи, которые установили соединение из своего браузера с узлом A, не смогут общаться с пользователями, которые подключились к узлу B?
Если это так, как бы мы могли сделать это возможным.
Ответ №1:
По этой же ссылке, чуть ниже раздела введения, обсуждаются 4 различных метода отображения:
- Поставщик идентификаторов пользователя (SignalR 2)
- Хранилище в памяти, такое как словарь
- Группа SignalR для каждого пользователя
- Постоянное внешнее хранилище, такое как таблица базы данных или хранилище таблиц Azure
И после этого есть таблица, которая показывает, какие из них работают в разных сценариях. Одним из таких сценариев является «Более одного сервера».
Поскольку это не упоминается, это зависит от того, какой метод отображения вы используете.
Оттуда вы можете проверить «масштабирование» на том же сайте, который вы отметили, на котором есть несколько методов, которым вы можете следовать в зависимости от того, что соответствует вашим потребностям. Здесь обрабатывается отправка сообщений клиентам, независимо от того, к какому серверу они подключены.