1 - Configuration de base serveur
NestJS support nativement les WebSockets. Il est cependant nécessaire d'installer nestjs/websockets et nestjs/platform-socket.io afin de permettre à l'application d'utiliser les websockets.
Installation des dépendances
npm i @nestjs/websockets @nestjs/platform-socket.io
Création d'un Gateway
Un peu à l'image des contrôleurs qui reçoivent les requêtes HTTP lorsqu'on fait référence à l'API, en NestJS les Gateways reçoivent les requêtes en provenance des WebSockets.
Imaginez que vous créez une application de dessin collaboratif. Chaque utilisateur peut faire des requêtes pour colorer un pixel.
Ainsi, pour l'exemple, le gateway sera créé dans un module qui s'appelle pixels, responsable de gérer les requêtes d'ajout de pixels.
-
Dans le module pertinent de Nest, on crée un fichier du genre
[nom-des-evenements]-events.gateway.ts. Dans mon cas, j'ai un fichierpixels-events.gateway.tspuisque je gère des événements liés aux pixels. -
Ensuite, on défini une classe tout en lui ajoutant le décorateur
@WebSocketGatewaysrc/pixels/pixels-events.gateway.ts@WebSocketGateway(80, { cors: true })
export class PixelsEventsGateway implements OnGatewayConnection, OnGatewayDisconnect {
handleConnection(client: any, ...args: any[]) {
console.log('Client connected:', client.id);
}
handleDisconnect(client: any) {
console.log('Client disconnected:', client.id);
}
}infoLa classe implémente
OnGatewayConnectionetOnGatewayDisconnectqui forcent la présence de fonctions pour gérer la connexion et la déconnexion. Lorsqu'un nouveau client se connecte, la fonctionhandleConnectionsera exécutée, par exemple. -
Il faut s'assurer d'ajouter le gateway à la liste des providers du module. Par exemple:
src/pixels/pixels.module.ts@Module({
providers: [PixelsEventsGateway]
})
export class PixelsModule {}
Tester la connexion
Pour tester la connexion, vous pouvez utiliser Postman, mais en mode Socket.io (une implémentation de WebSockets).
-
À partir du menu
File, sélectionnezNew... -
Choisissez
Socket.io
-
Entrez les informations de connexion (
ws://localhost:80) et appuyez surConnect
-
Postman devrait vous confirmer la connexion et vous devriez voir dans les logs de NestJS quelque chose comme:
Client connected: Q1ajBrvyWFFLryuKAAABinfoChaque client connecté se voit attribuer un identifiant
-
Vous pouvez vous déconnecter à l'aide de l'option
Disconnectet vous devriez voir afficher en console:Client disconnected: Q1ajBrvyWFFLryuKAAAB