WebSockets: Реальное время, двунаправленная связь

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

Как работают WebSockets? Сравнение с HTTP

В отличие от HTTP, WebSockets используют двунаправленный поток данных. Это ключевое отличие, делающее технологию уникальной.

HTTP работает по принципу запроса-ответа: клиент постоянно запрашивает обновления у сервера. Схема обмена выглядит так:

  • Клиент запрашивает: «Есть ли сообщения?»
  • Сервер отвечает: «Нет».
  • Клиент повторяет запрос.
  • Сервер отвечает: «Нет».
  • (Этот цикл повторяется многократно)
  • Боб отправляет сообщение на сервер.
  • Клиент запрашивает: «Есть ли сообщения?»
  • Сервер отвечает: «Да, сообщение: Привет, мир!»

WebSockets работают иначе. Достаточно одного запроса:

  • Клиент говорит: «Сообщи мне, когда появится сообщение».
  • Боб отправляет сообщение на сервер.
  • Сервер отвечает клиенту: «Сообщение: Привет, мир!»

Применение WebSockets

WebSockets идеально подходят для приложений, требующих взаимодействия в режиме реального времени, таких как:

  • Чат-приложения
  • Приложения IoT (Интернет вещей)
  • Многопользовательские игры

Когда WebSockets не нужны?

WebSockets — эффективное решение в большинстве случаев. Исключения:

  • Несовместимость браузеров: Несмотря на широкую поддержку (более 95% браузеров), в редких случаях она может отсутствовать.
  • Простые приложения: Для простых приложений (например, CMS), где не требуется функциональность реального времени, достаточно REST API с методами GET, POST, PUT и другими.

Практический пример: Код на JavaScript и Node.js

Ниже приведены упрощённые примеры кода на JavaScript (клиент) и Node.js (сервер), демонстрирующие работу WebSockets. Они не предназначены для использования в реальных проектах.

Код клиента (JavaScript):

// Код клиента (упрощенный пример)
let socket = new WebSocket('ws://localhost:8080');
socket.onmessage = function(event) {
  console.log(event.data);
};
socket.send('Hello server!');

Код сервера (Node.js):

// Код сервера (упрощенный пример)
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    wss.clients.forEach(function each(client) {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });
});

Альтернатива: Long Polling

Если WebSockets недоступны, можно использовать Long Polling. При этом клиент с заданной периодичностью (например, каждые 200 миллисекунд) проверяет наличие новых сообщений на сервере. Библиотека Axios может упростить работу с HTTP-запросами.

WebSockets — перспективная технология для создания приложений с взаимодействием в реальном времени, включая онлайн-игры.

Что будем искать? Например,программа