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

Добрый день.

Фон: ASP.NET MVC 3 / SignalR.

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

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

Х является:

5 для IE и Chrome

14 для FF.

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

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

 Jan Saladukha30 мар. 2012 г., 23:21
Спасибо за быстрый ответ! Я не использую фабрику. Запросы - это сообщения браузера во время начального подключения к хосту (если я не ошибаюсь, у меня сейчас нет кода). URL-адрес является внутренним URL-адресом signalR, я использую реализацию Hubs. Я также заметил, что эти «зависшие» запросы иногда принимаются хост-сервером, но это не является регулярным и может проходить минуту или две между JS-запросом и Hub-получением.
 Dave Lawrence29 мая 2013 г., 11:42
Имея ту же проблему. Пройдите 5 хромированных вкладок, и SignalR больше не работает. Я думаю, что это связано с максимальными пределами XHR-соединения, установленными в браузере. Мне действительно нужно найти способ увеличить эти пределы.
 redsquare30 мар. 2012 г., 18:37
Нужно больше информации. Используете ли вы фабрику connectionid и даете ли пользователю тот же идентификатор? 7 Какие запросы, о которых вы говорите, занимают минуты. На какой URL они собираются.

Ответы на вопрос(4)

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

Есть ли способ получить количество соединений в группе хабов Signalr?

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

 Jan Saladukha25 окт. 2012 г., 12:19
Спасибо за отзыв, но это не помогло.

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

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

 Jan Saladukha23 окт. 2012 г., 23:42
Я использую 0,4, а также.

рвере:

Windows Server 2008 с пакетом обновления 2 / IIS7

К сожалению, ситуация такая же. Например, Chrome показывает мне следующую картинку:

http://clip2net.com/s/1KWF9

Где [1 - 6] - iFrames с чатами. Начиная с 6-го iFrame (или отдельной вкладки / окна браузера - это не важно), связь между клиентами и сервером резко замедляется. Этот 6-й запрос фактически успешно завершен, но через 2 минуты :). А следующий выполняется еще дольше:

http://clip2net.com/s/1KWGC

Я проверил этот случай с другим примитивным примером signalR и получил то же самое ..

 Jan Saladukha31 мар. 2012 г., 17:26
Во время исследования проблемы я нашел некоторую информацию об ограничениях браузера на одновременные соединения. Например здесь:openajax.org/runtime/wiki/The_Two_HTTP_Connection_Limit_Issue И здесь:stackoverflow.com/questions/561046/... Он говорит о 2-х соединениях на экземпляр, но в моем случае это не 2-х на самом деле .. Как я понял, signalR действительно использует параллельные соединения. Так что это может быть причиной моей проблемы, не так ли?

Ваш ответ на вопрос