Ожидание доступных сокетов в ASP.NET с помощью SignalR

Я использую SignalR для реализации чата в asp.net, но когда я открываю несколько вкладок моего веб-приложения, я получаю "Ожидание доступных сокетов..." .

Я выполнил все настройки, указанные в Performance Tuning SignalR, но моя проблема не решена из этого.

Как я могу решить эту проблему?

Ответы

Ответ 1

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

Ваши основные параметры

  • одностраничное приложение с вкладками в пользовательском интерфейсе, поэтому пользователю не нужно использовать вкладки браузера
  • разделение соединения каким-либо образом, например. как обсуждалось в этом вопросе
  • отдельные поддомены

Ответ 2

Вы можете реализовать механизм блокировки, который позволяет использовать только одно соединение на несколько вкладок.

  • сохранить значение этой блокировки в локальном хранилище
  • установите значение true перед тем, как открыть новое соединение, отпустите его (установите значение false), прежде чем закрыть соединение (возможно, вам придется реагировать на событие window.beforeunload).
  • создать таймер, который периодически проверяет значение этой блокировки. (Вам нужно сделать это, потому что пользователь может закрыть вкладку, на которой живет активное соединение) Открывает новое соединение только тогда, когда значение этой блокировки ложно.
  • транслировать полученное сообщение с активной вкладки на другие (пассивные вкладки). Сохраните значение сообщения в локальном хранилище, в то время как другие вкладки периодически проверяют это для новых значений. Пассивные вкладки должны хранить временную метку последнего возобновленного сообщения и смотреть только на сообщения, более новые, а затем на эту метку времени.

Это решение поможет вам справиться с максимальным пределом параллельных соединений.

Ответ 3

После борьбы с этой проблемой я решил это, используя концепцию поддомена. Для этого я создал несколько поддоменов, указывающих на главный сайт, и каждый раз, когда я указываю URL-адрес концентратора из другого домена, я смог открыть около 5 вкладок из каждого домена. И этот трюк отлично работает для меня.

Ответ 4

Решение с локальным хранилищем реализовано в этом небольшом проекте:

https://github.com/slimjack/IWC-SignalR

Я попробовал это в своем приложении и могу настоятельно рекомендовать, поскольку это сработало для меня. Я тестировал его на chrome, firefox и IE и был доволен производительностью.

Помните, что перед ссылкой <script src="signalr/hubs"></script> следует включить iwc-all.min.js, iwc-signalr.js и signalr-patch.js.

Он готов работать с jQuery 1.7 или выше. С небольшими изменениями я смог запустить его с версией 1.6.4.