WebSocket — це протокол двостороннього зв’язку, який використовує одне з’єднання TCP для надсилання/отримання даних.
Технічно WebSocket забезпечує повнодуплексний зв’язок між сервером і клієнтом, що дозволяє передавати дані в реальному часі. По-перше, він схожий на HTTP, але має більше переваг і інший варіант використання.
Подібно до того, як ви вводите http:// або https:// в адресному рядку веб-переглядача, щоб підключитися до веб-сторінки, WebSocket використовує іншу схему, тобто ws: або wss:, але ви не можете використовувати її в полі адреси веб-переглядача. .
Якщо ви користувач, який взаємодіє з програмою або службою через браузер, ви не можете відрізнити їх і не повинні це робити.
Але якщо ви розробник, корисно знати більше про WebSocket. Тут я висвітлюю деякі основи цього, а також рекомендовані сервери WebSocket, які ви можете використовувати.
WebSocket проти HTTP
Перш ніж досліджувати WebSocket, важливо дізнатися про його відмінності від HTTP.
Двонаправлений зв’язокОдноспрямований зв’язок. Серверу не потрібно чекати запиту клієнта на надсилання даних після встановлення з’єднання. Сервер має чекати, поки клієнт запитає дані, тобто потрібно встановити кілька з’єднань. Корисно для веб-програм у режимі реального часу, програм чату , або ігор. Все, що не потребує двосторонніх з’єднань. З’єднання завершується, лише якщо клієнт або сервер закриває його. З’єднання закривається після кожного запиту або відповіді клієнта/сервера. Приклади: багатокористувацькі ігри, програми обміну повідомленнями, база даних фондового ринкуПриклади: пошук Google, соціальні мережі та сповіщення веб-переглядача. WebSocket проти HTTP
Як працює сервер WebSocket?
Сервер WebSocket слухає порт TCP-сервера.
Сервер бере участь у створенні з’єднань. Щоб досягти цього, він робить ось що:
- Інтерпретує запити клієнтів.
- Надсилання відповіді від сервера клієнту.
- Слідкуйте за клієнтами.
- Зчитування замаскованих даних (зашифрованих), надісланих клієнтом, і їх демаскування.
Ви можете переглянути офіційну документацію Mozilla, щоб зрозуміти, як створити/написати сервери WebSocket.
Як працює підключення до сервера WebSocket?
Тепер, коли ви знаєте протокол WebSocket і його сервер, як це все працює?
Щоб ініціювати підключення WebSocket, потрібне підключення HTTP.
HTTP запускає магію, навіть якщо це не герой цієї історії. Загалом, весь технічний жаргон можна підсумувати в три кроки:
- Клієнт надсилає HTTP-з’єднання на сервер із відповідними заголовками, які запитують оновлення для протоколу.
- Коли це надходить, сервер відповідає, що він перемикається на протокол WebSocket.
- Далі клієнт підтверджує, що з’єднання оновлено, і готується розпочати передачу даних.
Якщо ви хочете зануритися в те, як це працює, модель безпеки, вимоги до клієнта/сервера тощо, ознайомтеся з його документом Internet Standards Track, щоб дізнатися більше.
Чому WebSockets надають перевагу для підключень у реальному часі?
WebSockets з’явилися через обмеження HTTP.
З’єднання HTTP є односпрямованими, тобто ви повинні дочекатися завершення запиту перед наступним запуском.
Існує обхідний шлях для цього, який називається довгим опитуванням, але він робить HTTP-запит із тривалим періодом очікування. Сервер використовує тривалий тайм-аут, щоб очікувати та надсилати дані без нового запиту HTTP.
Однак це пов’язує ресурси сервера, навіть якщо передача даних не відбувається.
Підключення в реальному часі не можуть дозволити собі час очікування. Дані повинні безперервно надходити від сервера, щоб відповідати вимогам клієнта.
WebSockets забезпечують повнодуплексне з’єднання, яке залишається активним, доки сервер/клієнт не розірватиме з’єднання.
Отже, ви отримуєте надійність і двосторонній зв’язок, що дозволяє створювати програми в режимі реального часу.
Якщо вам потрібні ті самі переваги для створення ваших програм, ось кілька чудових варіантів сервера WebSocker:
Сокеті
Soketi — це просте безкоштовне рішення з відкритим вихідним кодом, яке дозволяє зосередитися на архітектурі сервера. Він має на меті бути швидким сервером WebSocket, сумісним із Pusher, водночас пропонуючи вбудоване керування програмами.
Він також надає безсерверну пропозицію WebSocket, яку можна розгорнути для працівників Cloudflare. На момент написання цього, це було на стадії відкритого бета-тестування.
Якщо ви хочете розгорнути сервер WebSocket із максимальними налаштуваннями на своєму сервері, Soketi — чудовий вибір.
На жаль, він не пропонує жодного локального чи керованого рішення.
Socket.io
Socket.IO — ще один проект із відкритим вихідним кодом, який забезпечує канал зв’язку між сервером і клієнтом із низькими витратами.
Він підтримує повернення до тривалого опитування HTTP, якщо з’єднання втрачено, і спробує повторно підключитися автоматично.
Крім того, він сумісний із Deno, сучасним середовищем виконання для JavaScript і TypeScript, створеним у Rust.
Неймовірно популярний сервер WebSocket, який ви можете безкоштовно використовувати на своєму сервері. Ви можете переглянути офіційну документацію, щоб дізнатися більше, оскільки вона не пропонує послугу локального розгортання.
Пиріжкова розетка
Якщо ви шукаєте рішення WebSocket для свого підприємства чи бізнесу і не проти заплатити, Pie Socket — чудовий варіант.
Pie Socket — це пропозиція преміум-класу, де деякі послуги використовують такі компанії, як RedHat і Akamai.
Він також пропонує API WebSocket для мобільних, настільних комп’ютерів і пристроїв Інтернету речей. Ви можете вибрати бажаний регіон сервера, отримати підтримку блокчейну та визначити пріоритетність підтримки клієнтів, щоб допомогти вашому бізнесу.
Pie Socket надає 14-денну пробну версію (без кредитної картки), щоб ви могли випробувати її.
SocketCluster
Socket Cluster — це цікавий інструментарій, який також можна розгорнути в Kubernetes.
Він підтримує автентифікацію JWT, дозволяє контролювати та регулювати потоки даних, а також допомагає уникнути витоку пам’яті. SocketCluster також згадує, що порядок повідомлень не буде порушений і його можна легко розгорнути та масштабувати.
ws
ws — це бібліотека Node.js WebSocket, проста у використанні та має швидку клієнт/серверну реалізацію.
Це неймовірно популярний клієнт і сервер WebSocket для програм Node.js, які підтримують багато функцій. Ще один безкоштовний проект із відкритим кодом, який ви можете використовувати відповідно до своїх вимог.
Ковбой
Cowboy — це простий швидкий HTTP-сервер із підтримкою WebSocket, створений за допомогою коду Erlang.
Саме тому, що він використовує Erlang, він за своєю суттю цінний для створення програм реального часу, які потребують високої доступності. Наприклад, можна спробувати використовувати його для банківських систем та систем електронної комерції.
Розетка
Sockette — це легка обгортка для WebSocket, яка дозволяє автоматично відновити підключення, якщо з’єднання втрачено.
На жаль, проект більше не підтримується. Однак ви можете спробувати це для свого випадку використання.
Websocketd
Websocketd — це інструмент командного рядка, який допомагає обернути наявну програму командного рядка та надати їй доступ через WebSocket.
Це має бути корисним для легкого створення додатків із підтримкою WebSocket.
Подібно до попереднього проекту, він більше не розвивається. Однак ви можете спробувати це для своїх випадків використання. Дослідіть сторінку GitHub, щоб дізнатися більше.
NetCoreServer
Як випливає з назви, NetCoreServer — це бібліотека .NET Core (створена на C#), що підтримує HTTP(S), WebSocket та інші протоколи підключення.
Він також підтримує інтеграцію протоколу повідомлень із швидким двійковим кодуванням, гарантуючи, що сервер асинхронного сокета є надшвидким і має низьку затримку.
Щоб дізнатися більше, перегляньте його сторінку та документацію на GitHub.
Сервер для обробки з’єднань WebSocket є обов’язковим
Хоча ви можете вибрати будь-який сервер WebSocket і розгорнути його відповідно до своїх вимог, більшість із них використовують механізм зворотного проксі-сервера, щоб мінімізувати навантаження на сервер і підтримувати його якомога швидше.
Мільйони користувачів взаємодіють із службами, які використовують протокол WebSocket. Починаючи з додатків для чату та закінчуючи багатокористувацькими іграми, без сервера WebSocket у нас виникли б серйозні проблеми зі швидким обміном даними/отриманням інформації.
Зважаючи на це, вам слід вибрати лише найкращий сервер WebSocket відповідно до ваших вимог. Життєво важливо спробувати самостійно керувати ним, якщо ви хочете отримати повний контроль і необмежену масштабованість за невелику частку вартості.
Виберіть той, який забезпечує максимальну надійність, на яку заслуговує ваш проект.