Когда SignalR установил 8-10 подключений за раз, чат не работает

Я разрабатываю чат с помощью SignalR. Это отличная библиотека. Но я справился с одной проблемой, которую не могу решить уже какое-то время. Таким образом, проблема в том, что когда signalR делает 8-10 подключений за раз, чат больше не работает. Может быть, потому что я запускаю все на локальной машине?

Я думал, может быть, я где-то ошибся. Так я нашел простейший чат. Вы можете скачать его здесь. Я открыл его в 10 окнах, и он больше не работает. Это проблема с производительностью signalR или ошибка программистов? Как я могу заставить его работать быстрее?

Также я нашел чат JabbR . У него есть демонстрация, и он работает для многих людей. Они не делают ничего особенного, и это отлично работает.

Может ли кто-нибудь помочь с этой проблемой?

Большое спасибо за любую помощь, Дима.


person F0rc0sigan    schedule 03.05.2012    source источник
comment
На каком веб-сервере вы тестируете?   -  person Ramesh    schedule 03.05.2012
comment
Я разрабатываю приложение .net, поэтому я использую сервер разработки ASP.NET.   -  person F0rc0sigan    schedule 03.05.2012
comment
Проблема может заключаться в том, что достигнуто максимальное количество одновременных подключений. Попробуйте использовать iis экспресс   -  person Ramesh    schedule 03.05.2012
comment
Работал в сравнении с 2011, который всегда использует IIS Express. Та же проблема. Открываю 10 вкладок не больше. Как 10 вкладок могут достичь 5000 одновременных подключений, которые по умолчанию устанавливаются в ASP.NET. Может быть, я могу попробовать что-нибудь еще?   -  person F0rc0sigan    schedule 03.05.2012
comment
Что вы имеете в виду, говоря, что чат больше не работает? Вы получаете исключения или ошибки? Каково состояние вашего приложения?   -  person Ramesh    schedule 03.05.2012
comment
Я не получаю никаких ошибок. Просто signalR отправляет запрос ajax, и он не приходит на сервер. Он может прийти через несколько минут. Это куфддн странно.   -  person F0rc0sigan    schedule 03.05.2012
comment
Возможно, в браузере достигнуто максимальное количество подключений к одному адресу хоста. Попробуйте использовать 2 разных браузера.   -  person ZippyV    schedule 03.05.2012
comment
Я столкнулся с той же проблемой и описал ее здесь: stackoverflow.com/questions/9946951/ Если открыт другой браузер - проблем нет. Кажется, ограничение для каждого браузера, потому что я получаю разные числа для разных браузеров.   -  person Jan Lobau    schedule 25.10.2012
comment
@ F0rc0sigan, эй, у меня такая же проблема. Что в итоге сработало для вас?   -  person Yasser Shaikh    schedule 19.12.2016


Ответы (2)


Есть две проблемы, с которыми вы могли столкнуться:

  1. IIS/Cassini в Windows 7 имеет ограничение по умолчанию в 10 одновременных подключений. Попробуйте запустить тесты на Windows Server и посмотрите, будет ли он вести себя так же.
  2. Попробуйте открывать соединения в разных окнах браузера и/или в разных браузерах и/или на разных машинах, а не не во вкладках. Я заметил, что в версии 0.4 при использовании вкладок могут возникнуть проблемы.
person Piotr Szmyd    schedule 03.05.2012
comment
Вы также можете использовать iis express в Windows 7. У него нет этих ограничений. - person davidfowl; 07.05.2012
comment
@davidfowl, у меня возникает эта проблема только тогда, когда я открываю более одной вкладки, но внутри одной вкладки все работает нормально. не могли бы вы дать мне некоторую информацию об этом, спасибо - person Sajjad Ali Khan; 25.04.2017
comment
Когда вы не используете веб-сокеты, существует ограничение на количество одновременных подключений, которые вы можете открыть к определенному концентратору. - person davidfowl; 25.04.2017
comment
Я включил веб-сокеты для IIS, а также увеличил количество одновременных запросов к ЦП внутри файла aspnet.Config, после чего столкнулся с той же проблемой. Когда я проверяю Fiddler, запрос не достигает сервера, он зависает (не получая никакого ответа). URL-адрес выглядит следующим образом: localhost/Microcare/signalr/start?transport=webSockets .. ... - person Sajjad Ali Khan; 25.04.2017

Нашел обходной путь:

Перепишите connectionId, чтобы на каждой вкладке у вас был один и тот же идентификатор подключения:

 public class MyConnectionFactory : IConnectionIdGenerator
    {
        public string GenerateConnectionId(IRequest request)
        {
            return MyUserManager.Instance.CurrentUserID.ToString();
        }
    }

Добавьте в global.asax:

GlobalHost.DependencyResolver.Register(typeof(IConnectionIdGenerator), () => new MyConnectionFactory());

И мне удалось открыть столько вкладок, сколько я мог. И все вкладки получают уведомления.

Надеюсь, это помогло.

person Dmitry    schedule 22.10.2012
comment
Я так не думаю. Идентификаторы соединения должны быть уникальными для каждого соединения, иначе все сломается: stackoverflow.com/questions/11522090/ - person Alexander Köplinger; 22.10.2012
comment
Я проверил это, в Chrome и FF, открытых под одним и тем же ConnectionId, с несколькими открытыми вкладками, и каждая вкладка получает уведомления от signalR. Не могли бы вы объяснить, когда мне следует ожидать проблем? «Потому что я останусь с этим обходным путем, потому что пока он работает.. Спасибо. - person Dmitry; 22.10.2012
comment
В моих тестах использование одного и того же идентификатора подключения для нескольких подключений (например, при открытии нескольких вкладок или окон браузера) приводит к немедленному отключению. Это может быть побочным эффектом транспорта Server-Sent-Events, используемого в Chrome и FF, если это не происходит с вами. Как упоминает dfowler (создатель SignalR) в вопросе, который я связал, идентификаторы подключения должны быть уникальными. Это также причина, по которой он удалил IConnectionIdGenerator из следующей версии SignalR, поэтому создание дубликатов идентификаторов невозможно. - person Alexander Köplinger; 22.10.2012
comment
Значит, мы не можем использовать SignalR, если пользователь открывает несколько вкладок?.. Я использую IIS8, и тоже есть проблема, если мы используем уникальный идентификатор соединения. Это печально. Может быть, мы можем что-то сделать с помощью ServicePointManager, но я пока не разобрался. - person Dmitry; 23.10.2012
comment
На самом деле это ограничение браузера. Если вы посмотрите на browserscope.org/?category=network, вы увидите, что самые современные браузеры разрешают только 6 одновременных подключений на одно имя хоста, а SignalR установит одно подключение на вкладку. Наличие повторяющегося идентификатора подключения в SignalR не меняет этого ограничения, поэтому я не знаю, почему это сработало для вас. Возможно, запросы веб-сокетов не ограничены, но тогда также нет причин генерировать дубликаты идентификаторов. - person Alexander Köplinger; 23.10.2012
comment
Дело в том, что он работал и под IE9, даже под IIS7. И это довольно странно... Обычно я пытаюсь понять, почему что-то не работает, но сейчас я пытаюсь понять, почему это работает.. ) - person Dmitry; 23.10.2012