Комната в Nest
Все подключённые видят каждое изменение, хотя часть людей смотрит только свой раздел. Общая рассылка шумит лишними сигналами там, где нужен узкий круг получателей.
Комната в Socket.IO - именованная группа сокетов на сервере. Клиент просит войти в комнату, и дальше шлюз шлёт события только через выбор этой группы, не трогая остальных участников канала.
Покажем на примере постов:
import {
ConnectedSocket,
MessageBody,
SubscribeMessage,
WebSocketGateway,
WebSocketServer,
} from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
import { PostService } from './post.service.js';
@WebSocketGateway()
export class PostGateway {
@WebSocketServer()
server: Server;
postService: PostService;
constructor(postService: PostService) {
this.postService = postService;
}
@SubscribeMessage('joinFeed')
handleJoinFeed(
@MessageBody() room: string,
@ConnectedSocket() client: Socket,
) {
client.join(room);
}
@SubscribeMessage('createPost')
handleCreatePost(
@MessageBody() body: { title: string; room: string },
) {
const post = this.postService.add(body.title);
this.server.to(body.room).emit('postAdded', post);
}
}
Сделайте вход клиента в комнату
по строке из сообщения в
WorkerGateway и шлите
новые данные только участникам
этой комнаты.