SignalR OnConnected запускается на другом сервере к тому, к которому он фактически подключен - PullRequest
1 голос
/ 18 марта 2019

Я использую SignalR и веб-ферму в IIS, в настоящее время с 3 серверами, и запросы сбалансированы по нагрузке через ARR.

Существуют определенные внешние события, которые я хочу обработать серверомкоторый клиент подключен.Поэтому я хочу отследить, к какому из 3 серверов клиент подключен в данный момент.

Я подумал, что мог бы сделать это с помощью OnConnected и в этом методе сохранить MachineName против ConnectionID в redis.Проблема в том, что OnConnected, кажется, называется другим сервером, чем тот, к которому подключен клиент.

При расследовании кажется, что существует три вызова, один из которых к / negiotateодин для / подключить и один для / начать.Кажется, что / connect - это соединение веб-сокета, которое поддерживается на протяжении всего времени, остальные просто временные.Эти три соединения могут происходить на разных серверах, и кажется, что соединение websocket может быть с сервером A (так что это сервер, на который собирается клиентское соединение SignalR), но OnConnected запускается на сервере B.

Мне было интересно, пропускаю ли я что-нибудь, что позволит мне увидеть, к какому серверу фактически подключено соединение SignalR?

Спасибо,

Будет

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Я верю, что это то, что вы должны сохранить.Предполагая, что вы используете базу данных для сопоставления пользователей , у вас может быть дополнительное поле, например «LoggedInOn», и хранится имя хоста сервера или другой идентификатор.

Однако, кроме некоторых аспектов устранения неполадок, которые вы ищете, правильная отправка / получение сообщений должна пересекать объединительную плату на все серверы.Таким образом, независимо от того, к какому серверу они подключены, сообщения принимаются.

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

Если этого не произойдет, я бы просмотрел документы, как сказал Келсо Шарп.

0 голосов
/ 18 марта 2019

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

https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-in-signalr

Без правильной реализации объединительной платы невозможно делать то, что вы хотите.

...