Шлюз в Nest
Клиенту нужны мгновенные обновления, а обычный ответ страницы приходит один раз. Пока браузер не обратится снова, экран показывает старую картину, хотя на сервере данные уже изменились.
Шлюз в Nest - класс с пометкой
WebSocketGateway: он открывает
точку для постоянного канала
и живёт в том же приложении,
что и HTTP. Его записывают
в провайдерах модуля, как сервис.
Чтобы Nest использовал Socket.IO,
ставят пакеты
@nestjs/websockets,
@nestjs/platform-socket.io
и socket.io, а при старте
приложения указывают адаптер
IoAdapter.
Покажем на примере постов:
npm install @nestjs/websockets @nestjs/platform-socket.io socket.io
При запуске подключим адаптер Socket.IO:
import { NestFactory } from '@nestjs/core';
import { IoAdapter } from '@nestjs/platform-socket.io';
import { AppModule } from './app.module.js';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useWebSocketAdapter(new IoAdapter(app));
await app.listen(3000);
}
bootstrap();
Опишем пустой шлюз для постов:
import { WebSocketGateway } from '@nestjs/websockets';
@WebSocketGateway()
export class PostGateway {}
Запишем класс в провайдерах корневого модуля:
import { Module } from '@nestjs/common';
import { PostGateway } from './post.gateway.js';
@Module({
providers: [PostGateway],
})
export class AppModule {}
Установите пакеты веб-сокетов,
подключите адаптер при старте
приложения работников, опишите
WorkerGateway с пометкой
шлюза и запишите его в провайдерах
корневого модуля.