Волга
Главная
API Docs
GitHub
  • English
  • Русский
Главная
API Docs
GitHub
  • English
  • Русский
  • Главная
  • Старт

    • Быстрый старт
    • Параметры маршрута
    • Параметры запроса
    • Группировка маршрутов
  • Запросы и ответы

    • Заголовки (Headers)
    • Работа с JSON
    • Работа с Form Data
    • Работа с файлами
    • Cookies
  • Middleware и инфраструктура

    • Основы Middleware
    • Пользовательские Middleware
    • Сжатие ответов
    • Распаковка запросов
    • CORS (Cross-Origin Resource Sharing)
    • Статические файлы
    • Rate Limiting
  • Безопасность и доступ

    • Аутентификация и авторизация
  • Надежность и наблюдаемость

    • Центральный обработчик ошибок
    • Логгирование и Трассировка
    • Отмена запросов
  • Протоколы и realtime

    • HTTP/1 и HTTP/2
    • HTTPS
    • WebSockets
    • Server-Sent Events (SSE)
  • Продвинутые паттерны

    • Внедрение Зависимостей
    • Пользовательская обработка методов HEAD, OPTIONS и TRACE

Server-Sent Events (SSE)

Волга включает встроенную поддержку Server-Sent Events (SSE), что позволяет вам реализовать одностороннюю связь в реальном времени от сервера к клиенту в ваших веб-приложениях. Эта функция доступна по умолчанию и совместима с протоколами HTTP/1 и HTTP/2.

Базовая реализация

В примере ниже показано, как создать простую конечную точку SSE. Она сопоставляет запрос GET с маршрутом /events, устанавливает Content Type как text/event-stream и непрерывно отправляет сообщение "Hello, world!" раз в секунду, пока клиент не отключится:

use volga::{App, error::Error, http::sse::Message, sse};
use futures_util::stream::repeat_with;
use std::time::Duration;
use tokio_stream::StreamExt;

#[tokio::main]
async fn main() -> std::io::Result<()> {
    let mut app = App::new();

    app.map_get("/events", || async {
        // Создаем поток сообщений с отправкой раз в секунду
        let stream = repeat_with(|| Message::new().data("Hello, world!"))
            .map(Ok::<_, Error>)
            .throttle(Duration::from_secs(1));

        sse!(stream)
    });

    app.run().await
}

Настройка сообщений

Волга предоставляет структуру Message, которая поможет вам создавать и настраивать сообщения SSE.

Для простых текстовых сообщений используйте метод data(), как показано выше. Если вам необходимо отправить структурированные данные, такие как JSON, используйте метод json(), который принимает любой тип, реализующий типаж serde::Serialize:

use volga::http::sse::Message;
use serde::Serialize;

#[derive(Serialize)]
struct SseData {
    data: String,
}

let payload = SseData { data: "Hello, world!".into() };
Message::new().json(payload);

В дополнение к этому, Message также поддерживает настройку имени события (поле event), идентификатора (поле id), комментариев (поле comment) и интервала попыток повторного подключения клиента (поле retry). Подробную информацию о формате сообщения SSE см. в руководстве MDN.

Полный пример использования можно так же найти по по ссылке.

Последнее обновление: 18.01.2026, 18:33
Prev
WebSockets