Как создать TCP сервер на Node.js

Cover Image for Как создать TCP сервер на Node.js

В этой статье мы рассмотрим, как создать простой TCP сервер на Node.js. TCP является одним из наиболее распространенных протоколов транспортного уровня. Он обеспечивает надежный способ отправки пакетов в упорядоченном и проверенном на ошибки потоке. TCP ориентирован на соединение, что означает, что перед отправкой данных между клиентом и сервером должно быть установлено соединение.

Установка Node.js:

Если у вас еще не установлен Node.js, скачайте и установите его с официального сайта.

Создание проекта:

Создайте новую папку для вашего проекта и перейдите в нее:

mkdir tcp-server
cd tcp-server

Создадим файл server.js

Импортируем net модуль, Этот модуль не требует установки, так как он идет вместе с Node.js.

const net = require('net');

Вызовем метод createServerver. Он создает объект сервера.

const net = require('net');
const server = net.createServer();

Добавим callback в метод createServer. Который вызовится в момент выполнения connection события. Это событие возникает при установлении нового соединения с сервером. Это событие возвращает объект, которому мы дали имя socket. Этот socket объект является экземпляром net.Socket.

const net = require('net');
const server = net.createServer((socket) => {
  console.log('Клиент подключился');
});

Мы можем отправлять данные в сокет, используя write метод. Мы передаем ему строку по нашему выбору, и она отправляется клиенту.

const net = require('net');
const server = net.createServer((socket) => {
  console.log('Клиент подключился');

  socket.write('Привет от TCP сервера!');
});

Событие data вызывается при получении данных от клиента.

const net = require('net');
const server = net.createServer((socket) => {
  console.log('Клиент подключился');

  socket.write('Привет от TCP сервера!');

  socket.on('data', (data) => {
    console.log('Получено:', data.toString());
  });
});

Событие end возникает, когда сокет полностью закрывается. Это означает, что связь закончилась.

const net = require('net');
const server = net.createServer((socket) => {
  console.log('Клиент подключился');

  socket.write('Привет от TCP сервера!');

  socket.on('data', (data) => {
    console.log('Получено:', data.toString());
  });

  socket.on('end', () => {
    console.log('Клиент отключился');
  });

  // Обрабатываем ошибки
  socket.on('error', (err) => {
    console.error('Ошибка:', err.message);
  });
});

Устанавливаем порт и адрес, на которых сервер будет слушать.

const PORT = 3500;
const HOST = 0.0.0.0;

Наконец, чтобы запустить сервер, мы используем .listen() метод. Ему передается номер порта и адресс. Теперь наш сервер работает и ждет новых подключений.

const net = require('net');
const server = net.createServer((socket) => {
  console.log('Client connected');

  socket.write('Hello from TCP server!');

  socket.on('data', (data) => {
    console.log('Msg from client:', data.toString());
  });

  socket.on('end', () => {
    console.log('Client disconnected');
  });

  // Обрабатываем ошибки
  socket.on('error', (err) => {
    console.error('Error:', err.message);
  });
});

const PORT = 3500;
const HOST = 0.0.0.0;

server.listen(PORT, HOST);

Метод listen так же принимает в качестве аргумента callback который вызывается когда listening событие генерируется, когда сервер начинает прослушивать входящие соединения. Мы используем это событие для вывода строки, сообщающей нам, что сервер работает.

server.listen(PORT, HOST, () => {
  console.log(`Server listening ${HOST}:${PORT}`);
});

Запуск сервера:

Запустите сервер с помощью следующей команды:

node server.js

Вы должны увидеть сообщение:

Сервер слушает 0.0.0.0:3500

Подключение к серверу:

Для тестирования нашего TCP сервера мы можем использовать команду telnet. Откройте новый терминал и выполните следующую команду:

telnet 0.0.0.0 3500

Вы должны увидеть сообщение:

Привет от TCP сервера!

Либо напишем небольшой файл client.js. Для проверки нашего сервера.

const net = require("net");

const client = net.connect({ port: 3500 }, () => {
  console.log("Connection established");
  client.write("Hello from client");
});

client.on("data", (data) => {
  console.log("Msg from server:", data.toString());
});

client.on("end", () => {
  console.log("Disconnected from server");
});

Запустите его при помощи:

node client.js

Заключение:

В этой статье мы создали простой TCP сервер на Node.js, который принимает соединения от клиентов, обрабатывает данные и отправляет ответные сообщения. Это базовый пример, который можно расширять и дорабатывать в зависимости от ваших потребностей. Вы можете добавить авторизацию, хранение данных, обработку различных команд и многое другое. Полный код этого примера доступен в GitHub Gist.

Если у вас возникли вопросы или предложения, пишите мне в социальных сетях. Удачного кодирования!