Любой современный отдельный сервер способен обслуживать тысячи клиентов одновременно .Его программное обеспечение HTTP-сервера просто ориентировано на Event-Driven (IOCP) (мы больше не находимся в старом соединении Apache одно соединение = одно уравнение потока / процесса).Даже встроенный в Windows HTTP-сервер (http.sys) ориентирован на IOCP и очень эффективен (работает в режиме ядра).С этой точки зрения, не будет большой разницы при масштабировании между WebSockets и обычным HTTP-соединением.Одно соединение TCP / IP использует небольшой ресурс (намного меньше, чем поток), и современные ОС оптимизированы для обработки большого количества одновременных соединений: WebSockets и HTTP - это просто протоколы уровня приложений OSI 7, унаследованные от этих спецификаций TCP / IP.
Но из эксперимента я обнаружил две основные проблемы с WebSockets:
- Они не поддерживают CDN;
- У них есть потенциальные проблемы безопасности.
Поэтому я бы порекомендовал следующее для любого проекта:
- Использовать WebSockets только для клиентских уведомлений (с механизмом возврата к длинному опросу - существует множество библиотек).вокруг);
- Используйте RESTful / JSON для всех остальных данных, используя CDN или прокси для кеша.
На практике полные приложения WebSockets плохо масштабируются.Просто используйте WebSockets для того, для чего они предназначены: отправлять уведомления с сервера на клиент.
О потенциальных проблемах использования WebSockets:
1.Рассмотрите возможность использования CDN
. Сегодня (почти через 4 года) масштабирование веб-сайтов включает использование Content Delivery Network (CDN), не только для статического контента (html, css,js) но также данные вашего (JSON) приложения .
Конечно, вы не будете помещать все свои данные в кэш CDN, но на практике много общего контента выиграет 'часто меняются.Я подозреваю, что 80% ваших ресурсов REST могут быть кэшированы ... Даже одна минута (или 30 секунд) истечения срока действия CDN может быть достаточной, чтобы дать вашему центральному серверу новую работу и повысить отзывчивость приложенияочень много, так как CDN может быть географически настроен ...
Насколько мне известно, в CDN пока нет поддержки WebSockets, и я подозреваю, что это никогда не произойдет.WebSockets имеют полное состояние, тогда как HTTP не имеет состояния, поэтому его легко кэшировать.Фактически, чтобы сделать WebSockets CDN-дружественным, вам может потребоваться переключиться на подход RESTful без учета состояния ... который больше не будет WebSockets.
2.Проблемы безопасности
Возможны проблемы безопасности WebSockets, особенно в отношении атак DOS.Для иллюстрации новых уязвимостей безопасности см. этот набор слайдов и этот билет WebKit .
WebSockets исключает любую возможность проверки пакетов на уровне приложения OSI 7, чтов наше время становится довольно стандартным в любой бизнес-безопасности.Фактически, WebSockets делает передачу запутанной, поэтому может быть серьезным нарушением безопасности.