HTTP против Websockets относительно накладных расходов - PullRequest
8 голосов
/ 04 апреля 2011

Я создаю программу синхронизации файлов (похожую на Dropbox), используя node.js на обоих концах. Мне нужно, чтобы потенциально тысячи клиентов запрашивали данные одновременно.

Вот моя текущая система:

  • Сервер отправляет клиенту уведомления через веб-сокет (файл был обновлен)
  • Клиент загружает в очередь и делает HTTP-запрос в режиме ожидания

Я буду обслуживать данные в виде сжатых кусков, скажем, по 50 МБ каждый, поэтому издержки HTTP-запроса (заголовки) незначительны.

Если бы я использовал веб-сокеты для запросов и push-уведомлений, было бы:

  • Заметно общее улучшение скорости? (уменьшенная задержка, аутентификация и т. д.)
  • Дополнительные издержки на сервере для поддержания открытых соединений?
  • Проблемы с передачей двоичных данных?

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

Примечание: Эти веб-розетки будут открыты в течение длительного времени, пока система клиента включена.

РЕДАКТИРОВАТЬ: я буду использовать веб-сокеты на другом http-сервере на разных портах, чтобы переместить их на разные ядра ЦП. Я мог бы потенциально открыть тысячи (если не сотни тысяч) одновременных веб-сокетов ...

Ответы [ 2 ]

5 голосов
/ 05 апреля 2011

Если вы намереваетесь использовать node.js как для клиента, так и для сервера, то вам следует использовать собственный модуль net с чистыми сокетами, а не с WebSockets. Чистые сокеты намного лучше оптимизированы для передачи данных, особенно двоичных. Насколько я знаю, браузерные WebSockets еще даже не поддерживают двоичную передачу.

3 голосов
/ 05 апреля 2011

Я искал что-то еще и нашел этот пост, который довольно хорошо объясняет веб-сокеты:

http://blog.new -bamboo.co.uk / 2009/12/7 / в режиме реального времени онлайн-активность-монитор-пример-с-узел-JS-и-WebSocket

Вот несколько довольно интересных частей из статьи:

Websocket позволяет поддерживать непрерывную связь при значительно меньших затратах сети по сравнению с существующим решением.

И

Во время установления соединения с WebSocket клиент и сервер обмениваются данными по кадрам, каждый по 2 байта, по сравнению с 8 килобайтами заголовка http при непрерывном опросе.

Для моего варианта использования (без браузера) это кажется оптимальным решением! Теперь мне просто нужно решить, хочу ли я иметь один веб-сокет или несколько веб-сокетов для каждого клиента (на данный момент я склоняюсь к одному из них).

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

Для тех из вас, кому небезразлична поддержка браузера, см. this . Похоже, что WebKit - единственный надежный движок, который его поддерживает (Chrome и Safari).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...