JavaRush /Курсы /Модуль 1: Web Core /Введение в WebSocket

Введение в WebSocket

Модуль 1: Web Core
23 уровень , 5 лекция
Открыта

6.1 Основные концепции WebSocket

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

Преимущества WebSocket

  1. Двусторонняя связь: WebSocket обеспечивает двустороннюю передачу данных, позволяя серверу и клиенту отправлять сообщения друг другу в любое время.
  2. Меньшая задержка: по сравнению с традиционными HTTP-запросами, WebSocket снижает задержку благодаря постоянному соединению.
  3. Меньшая нагрузка на сервер: WebSocket снижает количество HTTP-запросов, что уменьшает нагрузку на сервер.

Основные компоненты WebSocket

  1. Сервер WebSocket: серверная часть, которая принимает и обрабатывает соединения WebSocket.
  2. Клиент WebSocket: клиентская часть, которая устанавливает соединение с сервером WebSocket и обменивается данными.

6.2 Работа с WebSocket в JavaScript

Работа с WebSocket в JavaScript осуществляется с помощью объекта WebSocket, который предоставляет методы для установки соединения, отправки и получения сообщений, а также обработки событий.

Создание WebSocket-соединения:

JavaScript
    
      const socket = new WebSocket('ws://server.example.com/chat');
    
  

События WebSocket:

  1. open: срабатывает, когда соединение установлено.
  2. message: срабатывает, когда получено сообщение от сервера.
  3. error: срабатывает при возникновении ошибки.
  4. close: срабатывает при закрытии соединения.

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

JavaScript
    
      const socket = new WebSocket('wss://echo.websocket.org/chat');

      socket.addEventListener('open', (event) => {
        console.log('Connected to the WebSocket server');
        socket.send('Hello Server!');
      });

      socket.addEventListener('message', (event) => {
        console.log('Message from server:', event.data);
      });

      socket.addEventListener('error', (event) => {
        console.error('WebSocket error:', event);
      });

      socket.addEventListener('close', (event) => {
        console.log('Disconnected from WebSocket server');
      });
    
  

6.3 Пример сервера WebSocket на Node.js

Для создания WebSocket-сервера можно использовать библиотеку ws в Node.js.

Установка библиотеки:

Terminal
    
      npm install ws
    
  

Пример сервера WebSocket:

JavaScript
    
      const WebSocket = require('ws');
      const wss = new WebSocket.Server({ port: 8080 });

      wss.on('connection', (ws) => {
        console.log('New client connected');

        ws.on('message', (message) => {
          console.log('Received:', message);
          ws.send(`Server says: ${message}`);
        });

        ws.on('close', () => {
          console.log('Client disconnected');
        });
      });

      console.log('WebSocket server is running on ws://localhost:8080');
    
  

6.4 Основные события и методы WebSocket

Клиентские события:

  • onopen: срабатывает, когда соединение WebSocket установлено
  • onmessage: срабатывает, когда получено сообщение от сервера
  • onclose: срабатывает, когда соединение WebSocket закрыто
  • onerror: срабатывает при ошибке WebSocket

Клиентские методы

  • send(data): отправляет данные на сервер
  • close(code, reason): закрывает соединение WebSocket с указанным кодом и причиной

Серверные события

  • connection: срабатывает, когда клиент подключается к серверу
  • message: срабатывает, когда сервер получает сообщение от клиента
  • close: срабатывает, когда соединение WebSocket закрыто
  • error: срабатывает при ошибке WebSocket

Серверные методы

  • send(data): отправляет данные клиенту
  • close(code, reason): закрывает соединение WebSocket с указанным кодом и причиной

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

Пример: Чат в реальном времени

Клиентская сторона:

HTML
    
      <!DOCTYPE html>
      <html>
        <head>
          <title>WebSocket Chat</title>
        </head>
        <body>
          <input type="text" id="message" placeholder="Enter your message" />
          <button onclick="sendMessage()">Send</button>
          <div id="chat"></div>

          <script>
            const socket = new WebSocket('ws://localhost:8080');
            const chat = document.getElementById('chat');

            socket.onopen = function() {
              console.log('WebSocket is open now.');
            };

            socket.onmessage = function(event) {
              const message = document.createElement('p');
              message.textContent = event.data;
              chat.appendChild(message);
            };

            socket.onclose = function() {
              console.log('WebSocket is closed now.');
            };

            socket.onerror = function(event) {
              console.error('WebSocket error observed:', event);
            };

            function sendMessage() {
              const messageInput = document.getElementById('message');
              const message = messageInput.value;
              socket.send(message);
              messageInput.value = '';
            }
          </script>
        </body>
      </html>
    
  

Серверная сторона:

JavaScript
    
      const WebSocket = require('ws');

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

      server.on('connection', (ws) => {
        console.log('New client connected!');

        ws.on('message', (message) => {
          console.log('Received:', message);
          // Рассылка сообщения всем подключенным клиентам
          server.clients.forEach(client => {
            if (client.readyState === WebSocket.OPEN) {
              client.send(message);
            }
          });
        });

        ws.on('close', () => {
          console.log('Client disconnected');
        });

        ws.on('error', (error) => {
          console.error('WebSocket error:', error);
        });
      });

      console.log('WebSocket server is running on ws://localhost:8080');
    
  
1
Задача
Модуль 1: Web Core, 23 уровень, 5 лекция
Недоступна
Соединение WebSocket
Соединение WebSocket
1
Задача
Модуль 1: Web Core, 23 уровень, 5 лекция
Недоступна
WebSocket-чат
WebSocket-чат
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анастасия Уровень 46
15 сентября 2025
Есть сервер на node js, а как работать с node js, я так понимаю это будет в другом модуле... Пришлось ковыряться, как их запустить, чтобы пример работал локально =(((