SignalR: сервер не получает никаких запросов, если в одном браузере установлено более X подключений.

Добрый день.

Предыстория: ASP.NET MVC 3/SignalR.

Я разрабатываю типовой компонент чата, который будет использоваться на большом портале. Я написал небольшой эмулятор, который открывает новое окно с компонентом чата и новым подключением SignalR.

Проблема: Все работает нормально, но: Внезапно я заметил, что если я открываю более X окон/вкладок с одним и тем же компонентом в одном браузере - сервер перестает получать какие-либо ответы от любые клиенты, связанные с ним.

X:

5 для IE и Chrome

14 для FF.

Я предполагаю, что это проблема браузера, потому что значение отличается от одного к другому. Кроме того, я заметил, что запросы могут оставаться в ожидании в течение нескольких минут! И таймаута нет..

Может кто сталкивался с чем-то подобным, или знает в чем может быть причина такого странного поведения? Заранее спасибо, Ян.


person Jan Lobau    schedule 30.03.2012    source источник
comment
Нужно больше информации. Используете ли вы фабрику идентификаторов соединений и предоставляете пользователю тот же идентификатор? 7. О каких запросах вы говорите, которые занимают минуты. По какому адресу они идут.   -  person redsquare    schedule 30.03.2012
comment
Спасибо за быстрый ответ! Я не пользуюсь фабрикой. Запросы представляют собой POST-запросы браузера при запуске подключения к хосту (если я не ошибаюсь, у меня сейчас нет кода здесь). URL-адрес является внутренним URL-адресом signalR, я использую реализацию концентраторов. Я также заметил, что эти замороженные запросы иногда принимаются хостом сервера, но это не регулярно, и между JS-запросом и получением хаба может пройти минута или две.   -  person Jan Lobau    schedule 31.03.2012
comment
Имея ту же проблему. Выйдите за пределы 5 вкладок Chrome, и SignalR больше не работает. Я думаю, что это связано с максимальными ограничениями соединения XHR, установленными в браузере. Мне действительно нужно найти способ увеличить эти пределы.   -  person Dave Lawrence    schedule 29.05.2013


Ответы (3)


Я собираюсь предположить, что вы используете IIS 7/7.5 в Windows 7. Если вы действительно используете Windows7, вам нужно использовать IIS Express, поскольку он поддерживает только 10 одновременных подключений (ограничение клиентской ОС). В качестве альтернативы вы можете использовать Windows Server, чтобы получить все преимущества IIS.

person davidfowl    schedule 31.03.2012

Это первый пост за три дня гугления, который приблизился к моему опыту. Я использую клиент .NET и попытался изолировать проблему, создав приложение только с проблемными областями. Разница в нашей ситуации заключается в следующем: у меня, похоже, нет ограничения на количество подключений на клиенте. На самом деле, у меня не было проблем, пока я не развернул свой .Net-концентратор на windows server 2008 Hyper VPS. IIS express работает как по маслу. Я проверил, работают ли асинхронные службы и функции, и следил за статьями по настройке производительности, которые david упоминает в документации, настраивая максимальное количество потоков в очереди и т.п. Обратите внимание, что описанные вами минутные-двухминутные задержки идентичны моим. Я обновился до последней версии SignalR (.4) от nuget, и по какой-то причине это сломало мое решение.

Можете ли вы сказать мне, на какой версии вы находитесь? Я подозреваю, что это может быть связано с безопасностью физического хоста, на котором работает мой vps. Я собираюсь попробовать это на другой платформе виртуализации, чтобы исключить проблемы с гипервизором.

person Tony    schedule 02.05.2012

Пожалуйста, смотрите мой ответ здесь: Есть ли способ получить количество подключений в группе концентратора Signalr?

Идея состоит в том, чтобы перезаписать connectionid.

person Dmitry    schedule 22.10.2012
comment
Спасибо за подсказку, но не помогло. - person Jan Lobau; 25.10.2012