SebWeo.com
Уявіть собі телефонну розмову. Ви дзвоните другу, він піднімає слухавку, і ви можете говорити одночасно, перебивати один одного, мовчати і знову говорити. З’єднання тримається постійно, доки хтось не покладе слухавку. Це і є аналогія роботи сокетів.
А тепер уявіть рацію. Щоб щось сказати, ви повинні натиснути кнопку, сказати фразу і відпустити кнопку (“Прийом!”). Поки ви не натиснете кнопку знову, ви нічого не можете передати. Це аналогія класичного вебу (HTTP). У цій статті я хочу розповісти вам про технологію, яка перетворила веб з “рації” на “телефон” — про WebSocket.
Щоб зрозуміти революційність сокетів, треба згадати, як працює звичайний інтернет.
У звичайному вебі все ініціює клієнт (ваш браузер). Хочете побачити оновлення в чаті? Браузер має запитати сервер: “Є нові повідомлення?”. Сервер відповідає. Через секунду браузер знову питає: “А зараз є?”. Це називається Long Polling (довге опитування). Це неефективно, створює затримки і навантажує сервер.
Протокол WebSocket (ws:// або wss://) працює інакше. Браузер і сервер один раз “тиснуть руки” (Handshake) і встановлюють постійний тунель (Persistent Connection). Через цей тунель:
| Характеристика | HTTP | WebSocket |
|---|---|---|
| Ініціатор | Тільки клієнт | Клієнт або Сервер |
| Тип зв’язку | Однонаправлений (запит-відповідь) | Двонаправлений (дуплексний) |
| Оверхед (зайві дані) | Великий (заголовки в кожному запиті) | Мінімальний (тільки при встановленні) |
| Затримка (Latency) | Висока | Вкрай низька (Real-time) |
Ви користуєтесь ними щодня, навіть не підозрюючи про це. Ось типові сценарії:
Досить теорії. Давайте напишемо мінімальний код, щоб побачити сокети в дії. Для сервера ми використаємо Node.js (це найпростіший спосіб), а клієнтом буде звичайний HTML-файл.
Переконайтеся, що у вас встановлений Node.js. Створіть папку для проєкту, відкрийте там термінал і виконайте:
npm init -y npm install ws
Ми встановили бібліотеку ws — одну з найпопулярніших для роботи з сокетами в Node.js.
Створіть файл server.js. Цей скрипт буде “слухати” підключення і пересилати повідомлення всім підключеним клієнтам.
const WebSocket = require('ws');
// Створюємо сервер на порту 8080
const wss = new WebSocket.Server({ port: 8080 });
console.log("Сервер сокетів запущено на порту 8080");
wss.on('connection', function connection(ws) {
console.log('Новий клієнт підключився!');
// Коли отримуємо повідомлення від клієнта
ws.on('message', function incoming(message) {
console.log('Отримано: %s', message);
// Розсилаємо це повідомлення ВСІМ підключеним клієнтам
wss.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(message.toString()); // Перетворюємо буфер в рядок
}
});
});
});
Запустіть сервер командою: node server.js
Створіть файл index.html. Тут ми використаємо вбудований у браузер API WebSocket.
<!DOCTYPE html>
<html lang="uk">
<body>
<h2>Мій WebSocket Чат</h2>
<div id="chat" style="border: 1px solid #ccc; height: 200px; overflow-y: scroll; margin-bottom: 10px;"></div>
<input type="text" id="messageInput" placeholder="Введіть повідомлення">
<button >
Тепер відкрийте index.html у двох різних вкладках браузера. Напишіть щось в одній — і воно миттєво з’явиться в іншій! Вітаю, ви створили свій перший Real-time додаток.
Альтернативи: Socket.IO
На практиці чистий WebSocket використовують рідко. Частіше беруть бібліотеку Socket.IO. Чому?
На мою думку, WebSockets — це одна з найцікавіших технологій для вивчення. Вона повністю змінює підхід до проєктування додатків. Замість того, щоб постійно “смикати” сервер, ви створюєте єдиний простір, де події відбуваються миттєво.
Якщо ви хочете рухатися далі у веб-розробці, спробуйте інтегрувати сокети у свій наступний проєкт. Наприклад, зробіть просте сповіщення про нове замовлення на своєму сайті. Це додасть вашому проєкту професійного блиску та інтерактивності.
Довгий час планшети сприймалися виключно як пристрої для споживання контенту: подивитися YouTube, погортати стрічку новин…
Ви внесли правки в CSS, виправили критичний баг у JavaScript, завантажили файли на сервер і…
Уявіть, що ви щоранку приходите в одну й ту ж кав'ярню і питаєте баристу: "Які…
Дуже багато людей недооцінюють те, що у них є, і переоцінюють те, чого у них…
Варто тільки повірити, що ви можете – і ви вже на півдорозі до цілі Теодор…