Какие сетевые протоколы вы использовали в разработке на Node.js?

«Какие сетевые протоколы вы использовали в разработке на Node.js?» — вопрос из категории Сети, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Node.js я работал с различными сетевыми протоколами, выбирая их в зависимости от задачи.

1. HTTP/HTTPS & HTTP/2: Базовые протоколы для REST API и веб-серверов. Использую встроенные модули http/https или фреймворки (Express, Fastify, NestJS). HTTP/2, поддерживаемый нативно с Node.js 8.13+, даёт преимущества в производительности за счёт мультиплексирования.

const https = require('https');
const fs = require('fs');
const options = {
  key: fs.readFileSync('server-key.pem'),
  cert: fs.readFileSync('server-cert.pem')
};
const server = https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Secure connection established');
});
server.listen(443);

2. WebSocket: Для приложений реального времени (чаты, уведомления, дашборды). Использую библиотеку ws или Socket.IO (которая предоставляет fallback-механизмы и комнаты).

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
  ws.on('message', (message) => {
    // Обработка сообщения и broadcast
    wss.clients.forEach((client) => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });
});

3. TCP/UDP: Для низкоуровневого взаимодействия, например, при работе с кастомными сетевыми устройствами или высокопроизводительными сервисами. Встроенные модули net (TCP) и dgram (UDP).

4. Протоколы для межсервисного взаимодействия (Microservices):

  • gRPC: Для высокопроизводительного RPC между сервисами. Использую @grpc/grpc-js и Protocol Buffers для определения контрактов.
  • AMQP (через RabbitMQ): Для асинхронной обработки задач и событийной архитектуры. Библиотека amqplib.
  • MQTT: При разработке бэкенда для IoT-устройств. Библиотека mqtt.

5. Протоколы передачи файлов и почты:

  • FTP/SFTP: Для автоматизации загрузки/выгрузки файлов с использованием библиотек типа ssh2-sftp-client.
  • SMTP/IMAP: Для отправки почты (Nodemailer) и её обработки.

Выбор протокола зависит от требований: HTTP/WebSocket для клиент-серверного веба, gRPC для внутренних сервисов, MQTT для IoT, TCP/UDP для специфических низкоуровневых задач.