Отключение клиента в Nest
Вкладку закрыли, но сервер продолжает считать клиента активным. Без реакции на разрыв канала цифры онлайн и служебные заметки перестают совпадать с реальностью.
Интерфейс OnGatewayDisconnect
добавляет метод, который срабатывает,
когда сокет отвалился. Там же
можно уменьшить счётчик, убрать
запись из памяти или сообщить
остальным через общий сервер
сокетов о том, что участник ушёл.
Покажем на примере постов:
import {
OnGatewayConnection,
OnGatewayDisconnect,
WebSocketGateway,
WebSocketServer,
} from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
@WebSocketGateway()
export class PostGateway
implements OnGatewayConnection, OnGatewayDisconnect
{
@WebSocketServer()
server: Server;
connectedCount = 0;
handleConnection() {
this.connectedCount += 1;
}
handleDisconnect(client: Socket) {
this.connectedCount -= 1;
this.server.emit('viewerLeft', {
online: this.connectedCount,
socketId: client.id,
});
}
}
Допишите WorkerGateway:
при разрыве соединения уменьшайте
счётчик клиентов и сообщайте
всем оставшимся новое число
активных подключений.