Подтвердить что ты не робот

Использование WebSockets... Эффективно?

Я прочитал почти все руководства и учебники, которые можно найти в WebSockets, но ни один из них не рассмотрел, как эффективно их использовать.

Есть ли у кого-нибудь какой-нибудь справочник о том, как это сделать? Меня беспокоит количество пропускной способности, которое может принимать одно соединение, особенно когда приложения имеют hundrends открываемых соединений.

4b9b3361

Ответ 1

Эффективность в WebSocket зависит от реализации и архитектуры веб-сервера, который их обрабатывает. WebSocket - очень эффективный протокол с только 2 байтами (!) Накладными расходами, по сравнению со всеми полями заголовка HTTP и HTTP файлы cookie, которые отправляются в каждом запросе Ajax.

Обычно эффективный веб-сервер для веб-сайтов должен управляться событиями (см. примеры ниже). В противоположность этому традиционным способом реализации веб-серверов было создание нового потока для каждого запроса. Но потоки распределяют много памяти, например. 256 МБ на поток. Поэтому, если на вашем сервере имеется 1 ГБ памяти, вы не можете обрабатывать очень много запросов одновременно. Но если ваш сервер управляется событиями, ваше использование памяти будет почти постоянным, так как новые потоки не создаются. См. Также Технически, почему процессы в Erlang более эффективны, чем потоки ОС?

Вы можете отправлять любые данные в свои WebSockets. JSON эффективен, если клиент является веб-браузером или, возможно, типизированные массивы. Если ваш клиент является настраиваемым приложением, вы можете использовать Protocol Buffers. См. Также Технический документ протокола клиентского сервера Google Wave

Вы можете реализовать эффективные серверы websocket, используя Twisted (Python) или Netty (Java). Play Framework - это эффективная веб-инфраструктура для Java и Scala, реализованная в Netty. Другой эффективной альтернативой является веб-сервер Yaws (Erlang) или Node.js + Socket.io(JavaScript).

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