Будь-який сучасний єдиний сервер здатний обслуговувати тисячі клієнтів одночасно . Його HTTP-серверне програмне забезпечення повинно бути орієнтоване на події (IOCP) (ми не маємо в старому Apache одне з'єднання = один потік / рівняння процесу). Навіть сервер HTTP, вбудований у Windows (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 роки пізніше) масштабування веб-сторінок передбачає використання передового кінця мережі доставки вмісту (CDN) не лише для статичного вмісту (html, css, js), а й даних ваших програм (JSON) .
Звичайно, ви не будете ставити всі свої дані в кеш-пам'ять CDN, але на практиці багато загального вмісту не змінюватиметься часто. Я підозрюю, що 80% ваших REST-ресурсів може бути кешоване ... Навіть однієї хвилини (або 30 секунд) часу закінчення терміну дії CDN може бути достатньо, щоб дати центральному серверу нову трансляцію та значно підвищити швидкість реагування додатків, оскільки CDN може бути географічно налаштованим ...
Наскільки мені відомо, в CDN ще немає підтримки WebSockets, і я підозрюю, що цього ніколи не буде. WebSockets є загальнодержавними, тоді як HTTP не має статусу, тому його дуже легко кешувати. Насправді, щоб зробити WebSockets зручним для CDN, вам може знадобитися перейти на підхід RESTful без громадянства ... що вже не буде WebSockets.
2. Питання безпеки
У WebSockets можливі проблеми з безпекою, особливо щодо DOS-атак. Для ілюстрації про нові вразливості безпеки дивіться цей набір слайдів і цей квиток на веб-кави .
WebSockets уникає будь-якого шансу перевірити пакет на рівні прикладного рівня OSI 7, який сьогодні є досить стандартним у будь-якій безпеці бізнесу. Насправді WebSockets робить передачу придушеною, тому може бути серйозним порушенням витоку безпеки.