fix(server): use ClsInterceptor on websocket (#9859)

https://papooch.github.io/nestjs-cls/considerations/compatibility#websockets
This commit is contained in:
fengmk2
2025-01-23 06:54:23 +00:00
parent d52d03e1cd
commit 8021b89944
2 changed files with 17 additions and 2 deletions

View File

@@ -52,17 +52,28 @@ import { ENABLED_PLUGINS } from './plugins/registry';
export const FunctionalityModules = [
ClsModule.forRoot({
global: true,
// for http / graphql request
middleware: {
mount: true,
generateId: true,
idGenerator() {
// make every request has a unique id to tracing
return randomUUID();
return `req-${randomUUID()}`;
},
setup(cls, _req, res: Response) {
res.setHeader('X-Request-Id', cls.getId());
},
},
// for websocket connection
// https://papooch.github.io/nestjs-cls/considerations/compatibility#websockets
interceptor: {
mount: true,
generateId: true,
idGenerator() {
// make every request has a unique id to tracing
return `ws-${randomUUID()}`;
},
},
plugins: [
// https://papooch.github.io/nestjs-cls/plugins/available-plugins/transactional/prisma-adapter
new ClsPluginTransactional({

View File

@@ -1,4 +1,4 @@
import { applyDecorators, Logger } from '@nestjs/common';
import { applyDecorators, Logger, UseInterceptors } from '@nestjs/common';
import {
ConnectedSocket,
MessageBody,
@@ -7,6 +7,7 @@ import {
SubscribeMessage as RawSubscribeMessage,
WebSocketGateway,
} from '@nestjs/websockets';
import { ClsInterceptor } from 'nestjs-cls';
import { Socket } from 'socket.io';
import {
@@ -131,6 +132,7 @@ interface UpdateAwarenessMessage {
}
@WebSocketGateway()
@UseInterceptors(ClsInterceptor)
export class SpaceSyncGateway
implements OnGatewayConnection, OnGatewayDisconnect
{
@@ -147,11 +149,13 @@ export class SpaceSyncGateway
handleConnection() {
this.connectionCount++;
this.logger.log(`New connection, total: ${this.connectionCount}`);
metrics.socketio.gauge('realtime_connections').record(this.connectionCount);
}
handleDisconnect() {
this.connectionCount--;
this.logger.log(`Connection disconnected, total: ${this.connectionCount}`);
metrics.socketio.gauge('realtime_connections').record(this.connectionCount);
}