Как создать 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.
Если у вас возникли вопросы или предложения, пишите мне в социальных сетях. Удачного кодирования!