Приложения для чата в реальном времени стали неотъемлемой частью современной веб-разработки, позволяя пользователям общаться друг с другом в режиме реального времени через Интернет. В этом руководстве мы создадим простое приложение для чата в реальном времени с использованием Socket.io и Express.

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

Express — это популярная платформа веб-приложений для Node.js, обеспечивающая простой и гибкий способ создания веб-приложений и API. Мы будем использовать Express для создания серверной части нашего чат-приложения.

Предпосылки:

Прежде чем приступить к работе, на вашем компьютере для разработки должны быть установлены следующие инструменты:

  • Node.js: Вы можете скачать последнюю версию Node.js с официального сайта (https://nodejs.org/).
  • npm: npm — это менеджер пакетов для Node.js, включенный в Node.js. Вы можете проверить, установлен ли npm, выполнив в терминале следующую команду:
npm -v
  • Текстовый редактор: вам понадобится текстовый редактор, чтобы написать код для вашего чат-приложения. Некоторые популярные варианты включают Visual Studio Code, Sublime Text и Atom.

Создание сервера:

Во-первых, давайте создадим новый проект Node.js и установим необходимые зависимости. Откройте свой терминал и перейдите в каталог, в котором вы хотите создать свой проект. Затем выполните следующие команды:

mkdir chat-app
cd chat-app
npm init -y
npm install express socket.io

Это создаст новый каталог с именем «chat-app», инициализирует новый проект Node.js с настройками по умолчанию и установит пакеты Express и Socket.io.

Затем создайте новый файл с именем «server.js» в корне каталога вашего проекта и добавьте следующий код:

const express = require('express');
const http = require('http');
const socketio = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = socketio(server);

app.use(express.static(__dirname + '/public'));

io.on('connection', (socket) => {
  console.log('New user connected');

  socket.on('disconnect', () => {
    console.log('User disconnected');
  });
});

const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`);
});

Этот код настраивает базовый сервер Express и создает экземпляр Socket.io, который прослушивает входящие соединения. Когда новый пользователь подключается к чату, генерируется событие «соединение», и для этого пользователя создается новый сокет. Когда пользователь отключается, генерируется событие «disconnect».

Создание клиента:

Теперь, когда мы настроили наш сервер, давайте создадим клиентский код для нашего приложения чата. Создайте новый каталог с именем «public» в корне каталога вашего проекта, а затем создайте новый файл с именем «index.html» внутри каталога «public». Добавьте следующий HTML-код в файл «index.html»:

<!DOCTYPE html>
<html>
  <head>
    <title>Real-Time Chat App</title>
  </head>
  <body>
    <h1>Real-Time Chat App</h1>
    <form id="chat-form">
      <input type="text" id="message" placeholder="Enter your message...">
      <button type="submit">Send</button>
    </form>
    <ul id="messages"></ul>
  </body>
  <script src="/socket.io/socket.io.js"></script>
  <script>
    // Connect to Socket.io
    const socket = io();
    // Get DOM elements
    const form = document.getElementById('chat-form');
    const messageInput = document.getElementById('message');
    const messagesList = document.getElementById('messages');

    // Listen for form submission
    form.addEventListener('submit', (event) => {
      event.preventDefault();
    
      // Get message text
      const message = messageInput.value;
    
      // Emit 'send message' event to server
      socket.emit('send message', message);
    
      // Clear input
      messageInput.value = '';
    });
    
    // Listen for 'new message' event from server
    socket.on('new message', (message) => {
      // Create new list item with message
      const li = document.createElement('li');
      li.innerText = message;
    
      // Add new message to list
      messagesList.appendChild(li);
    });
  </script>
</html>

Этот код создает простую форму чата с полем ввода и кнопкой отправки. Когда форма отправляется, клиент отправляет серверу событие «отправить сообщение» с текстом сообщения. Затем сервер передает сообщение всем подключенным клиентам, которые, в свою очередь, отображают сообщение в своем окне чата.

Обработка сообщений:

Теперь, когда у нас настроены клиент и сервер, давайте добавим код для обработки отправки и получения сообщений. В вашем файле «server.js» добавьте следующий код в обработчик события «connection»:

socket.on('send message', (message) => {
  // Broadcast the message to all connected clients
  socket.broadcast.emit('new message', message);
});

Этот код прослушивает событие «отправить сообщение», созданное клиентом, и рассылает сообщение всем подключенным клиентам, используя событие «новое сообщение».

Тестирование приложения чата:

Чтобы протестировать наше чат-приложение, запустите сервер, выполнив в терминале следующую команду:

node server.js

Затем откройте веб-браузер и перейдите к http://localhost:3000. Вы должны увидеть форму чата и список сообщений. Попробуйте открыть один и тот же URL-адрес в нескольких вкладках или окнах и отправить несколько сообщений между ними. Вы должны увидеть, что сообщения появляются в режиме реального времени на всех подключенных клиентах.

Заключение:

В этом руководстве мы узнали, как создать приложение для чата в реальном времени с помощью Socket.io и Express. Мы настроили сервер и клиент и внедрили необходимый код для обработки отправки и получения сообщений в режиме реального времени. Это только начало, и вы можете продолжать использовать этот фундамент для создания более сложных и многофункциональных чат-приложений.