Ответ
UDP (User Datagram Protocol) — это протокол транспортного уровня, альтернативный TCP. Его главное отличие — отсутствие установки соединения и гарантий доставки. Он отправляет независимые пакеты данных (датаграммы), что делает его быстрее, но менее надежным.
Характеристики UDP:
- Без установки соединения: Нет «рукопожатия» (handshake).
- Ненадежный: Пакеты могут быть потеряны, продублированы или прийти в неправильном порядке.
- Не гарантирует целостность: Нет встроенного подтверждения получения.
- Быстрый: Минимальные накладные расходы на заголовки и управление.
Когда использовать UDP в Node.js?
- Стриминг (видео/аудио): Потеря нескольких пакетов менее критична, чем задержка.
- DNS-запросы: Быстрые запросы, где если ответ потерян, клиент просто повторит его.
- Многопользовательские онлайн-игры: Важна минимальная задержка (low latency).
- Широковещательные (broadcast) и multicast-рассылки.
Работа с UDP в Node.js (модуль dgram):
const dgram = require('dgram');
// Создание UDP-сокета
const server = dgram.createSocket('udp4'); // 'udp4' для IPv4, 'udp6' для IPv6
server.on('error', (err) => {
console.error(`Server error:n${err.stack}`);
server.close();
});
server.on('message', (msg, rinfo) => {
// rinfo содержит адрес и порт отправителя
console.log(`Server received: "${msg}" from ${rinfo.address}:${rinfo.port}`);
// Можно отправить ответ обратно
server.send(`Echo: ${msg}`, rinfo.port, rinfo.address);
});
server.on('listening', () => {
const address = server.address();
console.log(`UDP Server listening on ${address.address}:${address.port}`);
});
// Привязка сервера к порту 41234
server.bind(41234);
// --- Клиентская часть ---
const client = dgram.createSocket('udp4');
const message = Buffer.from('Hello UDP Server!');
client.send(message, 41234, 'localhost', (err) => {
if (err) {
client.close();
throw err;
}
console.log('Message sent');
});
client.on('message', (msg) => {
console.log(`Client got reply: ${msg}`);
client.close();
});
Важно: Для задач, где важна надежная доставка и порядок данных (веб-API, загрузка файлов, электронная почта), всегда используйте TCP (например, через модуль net или HTTP/HTTPS).