Вопрос по asp.net-mvc-3, .net, c# – Когда SignalR сделал 8-10 подключений одновременно, чат не работает

2

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

Я думал, может быть, я где-то ошибся. Итак, я нашел самый простой чат. Вы можете скачать егоВот. I opened it in 10 windows and it dont work anymore. Is that performance issue of signalR or programmers mistake? How can i make it work faster?

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

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

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

Что вы подразумеваете под живым чатом, который больше не работает? Вы получаете исключения или какие-либо ошибки вошли? Каково здоровье вашего приложения? Ramesh
На каком веб-сервере вы тестируете? Ramesh
Проблема может заключаться в том, что достигнуто максимальное количество одновременных соединений. Попробуйте использовать iis express Ramesh
Я разрабатываю приложение .net, поэтому я использую сервер разработки ASP.NET. F0rc0sigan
Запущенный в версии 2011, который всегда использует IIS Express. Та же проблема. Я открываю 10 вкладок не более. Как 10 вкладок могут достичь 5000 одновременных подключений, которые установлены по умолчанию в ASP.NET. Может быть, я могу попробовать что-нибудь еще? F0rc0sigan

Ваш Ответ

2   ответа
4

IIS/Cassini on Windows 7 has a default limit of 10 concurrent connections. Try running tests on Windows Server and see if it behaves the same. Try opening the connections in separate browser windows and/or separate browsers and/or machines, not tabs. I noticed that in 0.4 things can mess up when using tabs.
я включил веб-сокеты для IIS, а также увеличил количество параллельных запросов к процессору внутри файла aspnet.Config, а затем столкнулся с той же проблемой. Когда я проверяю Fiddler, запрос не достигает сервера, он замораживается (не получая никакого ответа). URL выглядит такlocalhost/Microcare/signalr/start?transport=webSockets .....
Когда вы не используете веб-сокеты, существует ограничение в количестве одновременных подключений, которые вы можете открыть для конкретного концентратора.
@ davidfowl, у меня эта проблема, только когда я открываю более одной вкладки, но внутри одной вкладки она работала довольно хорошо. Можете ли вы дать мне некоторую информацию об этом, спасибо
Вы также можете использовать IIS Express на Windows 7. У него нет этих ограничений.
0

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

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

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

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

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

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

Я проверял это на Chrome и FF, открытых под одним и тем же ConnectionId, с несколькими открытыми вкладками, и каждая вкладка получает уведомления от signalR. Если бы вы могли объяснить, когда я должен ожидать проблемы? "потому что я собираюсь остаться с этим обходным путем", потому что он работает на данный момент ... Спасибо.
Тогда это означает, что мы не можем использовать SignalR, если пользователь открывает несколько вкладок? .. Я использую IIS8, и проблема также возникает, если мы используем уникальный connectionid. Это грустно. Может быть, мы можем что-то сделать с помощью ServicePointManager, но я пока не понял этого.
Я так не думаю. Идентификаторы соединения должны быть уникальными для каждого соединения, или все ломается:stackoverflow.com/questions/11522090/…
В моих тестах использование одного и того же идентификатора соединения для нескольких соединений (например, при открытии нескольких вкладок или окон браузера) приводит к немедленному отключению. Это может быть побочным эффектом транспорта Server-Sent-Events, используемого в Chrome и FF, если это не произойдет с вами. Как упоминает dfowler (создатель SignalR) в вопросе, который я связал, идентификаторы соединений должны быть уникальными. Это также причина, почему он удалилIConnectionIdGenerator из будущей версии SignalR, поэтому создание дублирующих идентификаторов невозможно.
Дело в том, что он работал и под IE9, даже под IIS7. И это довольно странно ... Обычно я пытаюсь выяснить, почему что-то не работает, но сейчас я пытаюсь выяснить, почему это работает ...)

Похожие вопросы