Как NestJS поддерживает Server-Sent Events (SSE), и каковы основные преимущества использования SSE для реального времени в веб-приложениях?
Введение в Server-Sent Events (SSE)
Server-Sent Events (SSE) – это технология, позволяющая серверам отправлять обновления клиентским приложениям через HTTP-соединение в режиме реального времени. Это односторонняя связь: сервер посылает данные на клиент, а клиент не может отправлять данные обратно через это соединение. SSE часто используется для получения уведомлений о событиях, обновлений данных и других случаев, когда необходимо поддерживать связь в реальном времени без необходимости постоянного опроса сервера.
Поддержка SSE в NestJS
NestJS, как современный фреймворк для построения серверных приложений на Node.js, предоставляет простые инструменты для реализации SSE. Вы можете создать поток SSE, используя средства, предоставляемые библиотекой Express (в стандартной конфигурации NestJS).
Пример реализации SSE в NestJS
Рассмотрим пример простого приложения на NestJS, которое реализует серверные события:
import { Controller, Get, Res } from '@nestjs/common';
import { Response } from 'express';
@Controller('events')
export class EventsController {
@Get()
sendEvents(@Res() res: Response) {
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
// Отправка события каждый 5 секунд
const intervalId = setInterval(() => {
const data = JSON.stringify({ message: 'Обновление данных', timestamp: new Date() });
res.write(`data: ${data}\n\n`);
}, 5000);
// Очистка при закрытии соединения
res.on('close', () => {
clearInterval(intervalId);
res.end();
});
}
}
import { Module } from '@nestjs/common';
import { EventsController } from './events.controller';
@Module({
controllers: [EventsController],
})
export class EventsModule {}
import { Module } from '@nestjs/common';
import { EventsModule } from './events/events.module';
@Module({
imports: [EventsModule],
})
export class AppModule {}
Как использовать SSE на фронтенде
На стороне клиента вы можете использовать стандартный API EventSource
для подключения к SSE:
const eventSource = new EventSource('/events');
eventSource.onmessage = function(event) {
const data = JSON.parse(event.data);
console.log('Получено сообщение:', data);
};
eventSource.onerror = function(err) {
console.error('Ошибка:', err);
};
Преимущества использования SSE
Заключение
Server-Sent Events в NestJS предоставляют удобный способ для серверной части отправки обновлений в реальном времени на клиентские приложения. Эта технология лучше всего подходит для сценариев, где требуется односторонняя связь, например, для уведомлений и обновлений данных. Используйте приведенный пример как основу для реализации SSE в своих проектах!