У меня есть 2 веб-сервера (IIS 8.5) за аппаратным брандмауэром, и наше приложение использует SignalR для некоторых обновлений в реальном времени. Мы используем SQL Server в качестве объединительной платы, чтобы помочь нам работать в этой среде с балансировкой нагрузки. Кроме того, мы используем липкие сеансы в балансировщике нагрузки, чтобы помочь нам удерживать пользователей на одном и том же веб-сервере во время их сеанса. Когда мы работаем в этой аппаратной конфигурации, мы теряем как минимум 1/3 наших сообщений. Иногда мы получаем все ожидаемые сообщения, но чаще всего пропускаем много.
Когда мы работаем на одном веб-сервере, все сообщения принимаются. У кого-нибудь есть предложения по устранению этой проблемы? Мы включили журналы (как клиентские, так и серверные), и ничего не похоже на то, что оно отсутствует или сломано. Мы действительно в тупике.
РЕДАКТИРОВАТЬ---
Некоторые дополнительные детали, которые, я надеюсь, прольют свет на ситуацию.
- Сообщения между сервером и клиентом теряются. Практически все наше общение происходит от сервера к клиенту.
- Мы используем липкую сессию только на основе IP и ограничены 5 минутами, но мы теряем сообщения в течение этих 5 минут.
- Это какой-то старый код SignalR, который был минимально изменен со времен SignalR 1 (или даже старше). Мы храним в памяти список пользователей вместе с их подключениями и используем этот список для отправки уведомлений обратно клиенту. Скорее всего, это является причиной проблем, но с липкими сеансами пользователь должен застрять на одном сервере хотя бы на 5 минут, верно?
- Этот список пользователей сопоставляет имя пользователя с идентификатором соединения. Это полезно, когда наши серверные службы (на другом компьютере) отправляют обратно сообщение с именем пользователя, а не с идентификатором соединения.