Назад к вопросам
Junior
163
questionbank

Что такое веб-сокет?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Веб-сокет (WebSocket) — это протокол двусторонней постоянной связи между клиентом и сервером по одному TCP-соединению. В отличие от HTTP, где соединение устанавливается для каждого запроса и затем закрывается, веб-сокеты поддерживают открытое соединение, позволяя обоим участникам отправлять данные в любое время без необходимости повторного открытия.

Основные преимущества:

  • Низкая задержка: Данные передаются практически мгновенно.
  • Эффективность: Уменьшается накладные расходы на установку соединения.
  • Двусторонняя связь: Сервер может отправлять данные клиенту без явного запроса.

Примеры использования:

  • Чаты и мессенджеры
  • Онлайн-игры
  • Торговые платформы в реальном времени
  • Мониторинг данных (например, биржевые котировки)

Протокол веб-сокетов начинается с обычного HTTP-запроса, который содержит заголовок Upgrade: websocket. Если сервер поддерживает веб-сокеты, он отвечает с подтверждением обновления протокола, и соединение переключается на протокол веб-сокетов.

Пример установки соединения на стороне клиента (браузер):

// Создание веб-сокет соединения
const ws = new WebSocket('ws://localhost:8080');

// Обработка открытия соединения
ws.onopen = () => {
  console.log('WebSocket connection established');
  ws.send('Hello server!'); // Отправка сообщения серверу
};

// Обработка получения сообщения от сервера
ws.onmessage = (event) => {
  console.log(`Message from server: ${event.data}`);
};

// Обработка ошибки
ws.onerror = (error) => {
  console.error('WebSocket error:', error);
};

// Обработка закрытия соединения
ws.onclose = () => {
  console.log('WebSocket connection closed');
};

Пример обработки соединения на стороне сервера (Node.js с использованием библиотеки ws):

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

// Обработка нового соединения
wss.on('connection', (ws) => {
  console.log('Client connected');

  // Обработка получения сообщения от клиента
  ws.on('message', (message) => {
    console.log(`Received message => ${message}`);

    // Отправка ответа клиенту
    ws.send(`You sent: ${message}`);
  });

  // Обработка закрытия соединения
  ws.on('close', () => {
    console.log('Client disconnected');
  });

  // Обработка ошибки
  ws.on('error', (error) => {
    console.error('WebSocket error:', error);
  });

  ws.send('Welcome to WebSocket server!'); // Отправка приветствия при подключении
});

console.log('WebSocket server started on port 8080');