Больше чем HTTP в Rust: Real-Time сокеты и FTP

HTTP отлично подходит для большинства задач. Но он не справляется в двух конкретных областях.

  1. Real-time push (Push-уведомления в реальном времени). Браузерам нужно мгновенно узнавать о происходящих событиях. «Сырые» WebSockets работают, но вам придется самостоятельно писать всю логику переподключения и маршрутизации. Socket.IO является стандартом для JavaScript-разработчиков, но в Rust до недавнего времени не было хорошей серверной реализации.

  2. Передача файлов через FTP. Устаревшие системы и медиа-конвейеры повсеместно используют FTP. В async-экосистеме Rust здесь долгое время существовал пробел.

В этом посте мы покажем, как восполнить эти пробелы. Мы создадим сервер Socket.IO и FTP-сервер, а затем соединим их. Когда файл загружается через FTP, система мгновенно уведомляет каждый подключенный браузер.

Инструменты, которые мы используем:

• Socketioxide: реализация Socket.IO на Rust. Она работает с любым клиентом Socket.IO, например, на Node.js или Python. • Libunftp: инструмент для создания компонуемых FTP-серверов. • Suppaftp: async FTP-клиент для Rust.

Ключевые особенности:

Рабочий процесс:

  1. FTP-клиент загружает файл на FTP-сервер.
  2. FTP-сервер инициирует событие broadcast.
  3. Сервер Socket.IO получает это событие.
  4. Сервер Socket.IO отправляет событие "file_uploaded" в браузер.

Этот паттерн применим не только к файлам. Его можно использовать для уведомлений о завершении задач, обновления данных в реальном времени или панелей мониторинга развертывания (deployment dashboards).

Полный код доступен на GitHub.

Источник: https://dev.to/manan_shukla_eebf35d10bbf/beyond-http-in-rust-real-time-sockets-and-ftp-built-from-scratch-3o2a