Веб-узлы HTML5: максимальное количество открытых соединений?
Веб-узлы HTML5 (и были в течение некоторого времени) - горячая тема, поскольку они элегантно позволяют в режиме реального времени на стороне сервера.
В настоящее время у меня есть рабочее приложение с веб-серверами, основанное на Tomcat 7.0.30, которое включает поддержку веб-обозревателя. Но переход к производственной среде вызывает вопросы.
В основном я хотел бы узнать о возможном максимальном количестве подключений, которые могут работать (быть открытыми) одновременно в сеансе просмотра; сеанс просмотра подразумевает одну вкладку браузера или окно.
Разве открытые подключения к веб-узлу составляют максимальное количество подключений, которые могут одновременно обрабатываться веб-сервером? Например. MaxClients
в Apache.
И наоборот, максимальное количество веб-сайтов для одного сеанса просмотра ограничено самим браузером? Поскольку этот сообщение в блоге показывает, что до апреля 2012 года различные браузеры поддерживают разное количество открытых подключений к сети. (Я лично хотел бы открыть 1 открытый websocket на сеанс просмотра, но эта информация все равно будет полезной).
TL/DR:
- Что ограничивает количество возможных веб-сайтов в сеансе просмотра? Это клиент? Сервер? Или сочетание обоих?
- Используются ли те же ограничения (ограничения) для соединений
ws:
и wss:
?
Ответы
Ответ 1
Стандартная спецификация значений по умолчанию для max-соединений для браузеров отсутствует. Это зависит от реализации [0]. Кроме того, использование более чем веб-сокета на сеанс просмотра для одного и того же приложения кажется излишним, поскольку вы можете использовать паб/субканалы.
Узкое место для подключения обычно находится на стороне сервера. Веб-сокет - это обновление до HTTP, поэтому соединения - это "просто" обновленные HTTP-соединения (TCP). [1].HTTPS и WSS добавляют только уровень безопасности к нормальному соединению. Они не являются другим соединением [2]. В вашем случае проверьте maxConnections (и maxThreads) [3] и максимальную производительность вашей операционной системы [4] [5]. Если ваши параллельные соединения достигают десятков тысяч, возможно, вам стоит подумать о балансировке нагрузки или кластеризации [6].
[0] https://code.google.com/p/chromium/issues/detail?id=85323
[1] http://en.wikipedia.org/wiki/WebSocket
[2] http://en.wikipedia.org/wiki/HTTP_Secure
[3] http://tomcat.apache.org/tomcat-7.0-doc/config/http.html
[4] https://serverfault.com/questions/10852/what-limits-the-maximum-number-of-connections-on-a-linux-server
[5] https://superuser.com/questions/251596/is-there-a-hard-limit-of-65536-open-tcp-connections-per-ip-address-on-linux
[6] http://tomcat.apache.org/tomcat-7.0-doc/config/cluster.html
Подробнее о высоком concurrency: http://www.kegel.com/c10k.html
Ответ 2
В Gecko 7 они ввели aprameter network.websocket.max-connections
, вы можете установить его в about:config
. Он устанавливает максимальные соединения с веб-разъемом "за раз" в соответствии с этим:
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API
Я не знаю, можете ли вы определить этот номер из кода и если есть какой-либо способ определить, сколько из них открыто в других сеансах (так, сколько у вас осталось).