Эхо-сервер на Node.js (ws)
Пишем простейший WebSocket-сервер на Node.js, который возвращает каждое сообщение обратно.
Эхо-сервер — учебный сервер, который на любое полученное сообщение отвечает тем же сообщением; идеален для проверки канала.
Зачем эхо
Прежде чем строить чат, нужно убедиться, что канал работает в обе стороны. Эхо-сервер — минимальная проверка: отправили «привет» — получили «привет» обратно. Если эхо ходит, значит рукопожатие, приём и отправка исправны.
Библиотека ws
В Node.js самая популярная библиотека — ws. Сервер на ней умещается в несколько строк. Код серверный, в браузере не исполняется — он для чтения:
// server.js — запускается под Node.js: node server.js
const { WebSocketServer } = require("ws");
const wss = new WebSocketServer({ port: 8080 });
wss.on("connection", (socket) => {
console.log("Клиент подключился");
socket.on("message", (data) => {
const text = data.toString();
console.log("Получено:", text);
socket.send("эхо: " + text); // шлём обратно
});
socket.on("close", () => {
console.log("Клиент отключился");
});
});
console.log("Сервер слушает ws://localhost:8080");Что здесь происходит
WebSocketServer({ port: 8080 })— поднимает сервер на порту 8080.- Событие
connection— новый клиент; в колбэк приходит егоsocket. socket.on("message")— пришли данные; шлём их обратно черезsocket.send.socket.on("close")— клиент ушёл.
Как проверить
Из браузерной консоли любой страницы:
const s = new WebSocket("ws://localhost:8080");
s.onmessage = (e) => console.log(e.data);
s.onopen = () => s.send("привет");
// в консоли появится: эхо: приветКак работает под капотом
Библиотека ws сама перехватывает HTTP-запрос с заголовком Upgrade, считает Sec-WebSocket-Accept, отвечает 101 и дальше разбирает фреймы, отдавая вам готовые сообщения в событии message. Каждое подключение — отдельный объект socket; их у сервера может быть тысячи одновременно, и все они независимы.
Частые ошибки
- Работать с
dataкак со строкой напрямую. Вwsприходит буфер; для текста зовитеdata.toString(). - Не обрабатывать
close. Без этого вы не узнаете об ушедших клиентах и не очистите ресурсы. - Открывать
ws://со страницы по HTTPS. Для прода нуженwss://за TLS-прокси.
Итоги
- Эхо-сервер — минимальная проверка двустороннего канала.
- На Node.js его пишут на библиотеке
wsв несколько строк. - События сервера:
connection,message,close. - Каждое подключение — отдельный независимый
socket.