Какие сетевые протоколы вы использовали в разработке на 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 для специфических низкоуровневых задач.

Ответ 18+ 🔞

Э, слушай, давай разберём, на чём я в Node.js обычно катаюсь по сети. Протоколов, блядь, овердохуища, но тут главное — не накосячить и выбрать тот, который под задачу подходит, а не как мартышлюшка — хватать первый попавшийся.

1. HTTP/HTTPS & HTTP/2: Ну это, ёпта, классика жанра. Для всяких REST API и веб-серверов — самое то. Берёшь либо встроенные модули http/https, либо фреймворки вроде Express, если не хочешь велосипед изобретать. А 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 юзаю, а если нужен fallback для древних браузеров и комнаты — то Socket.IO, он, сука, как швейцарский нож.

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. Протоколы для микросервисов (тут веселье начинается):

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

5. Для файлов и почты:

  • FTP/SFTP: Когда нужно автоматически файлы туда-сюда гонять. Библиотека ssh2-sftp-client — просто вротберунчик, всё делает.
  • SMTP/IMAP: Отправка писем — Nodemailer, обработка входящих — тоже варианты есть.

Короче, суть в чём: не будь пидарасом шерстяным, который всё через HTTP пихает. Смотри на задачу. Веб для клиентов — HTTP/WebSocket. Внутренние сервисы — gRPC. Умные лампочки — MQTT. А если совсем низкий уровень — то TCP/UDP, тут уж терпения ноль ебать, нужно вникать. Выбор за тобой, чувак.