102 votes

webSocketServer node.js comment différencier les clients

J'essaie d'utiliser les sockets avec node.js, j'ai réussi mais je ne sais pas comment différencier les clients dans mon code. La partie concernant les sockets est la suivante :

var WebSocketServer = require('ws').Server, 
    wss = new WebSocketServer({port: 8080});
wss.on('connection', function(ws) {
    ws.on('message', function(message) {
        console.log('received: %s', message); 
        ws.send(message);
    });
    ws.send('something');
});

Ce code fonctionne bien avec mon client js.

Mais je voudrais envoyer un message à un utilisateur particulier ou à tous les utilisateurs ayant des sockets ouverts sur mon serveur.

Dans mon cas, j'envoie un message en tant que client et je reçois une réponse mais les autres utilisateurs ne montrent rien.

Je voudrais par exemple que l'utilisateur 1 envoie un message au serveur via webSocket et que j'envoie une notification à l'utilisateur 2 qui a son socket ouvert.

0voto

Mendi Barel Points 58

Utilisez une variable globale de compteur et attribuez sa valeur à chaque nouvelle connexion :

const wss = new WebSocket.Server({server});
let count_clients = 0;
wss.on('connection', function connection(ws){
    ws.id=count_clients++;
    console.log(`new connection, ws.id=${ws.id}, ${ws._socket.remoteAddress}:${ws._socket.remotePort} #clients=${wss.clients.size}`);
    ws.on('close', req => {console.log(`disconnected, ws.id=${ws.id}, ${ws._socket.remoteAddress}:${ws._socket.remotePort} #clients=${wss.clients.size}`);});
...

0voto

fly bird Points 818

Voici ce que j'ai fait :

* on connect, server generate an unique id (e.g uuid) for the connection,
    * save it in memory, (e.g as key of map),
    * send back to client in response,
    * 
* 
* client save the id, on each request with also send the id as part of request data,
* then server identify the client by id, on receive further request,
* 
* server maintain client, e.g cleanup on close/error,
* 

J'ai implanté l'idée, ça marche bien pour identifier le client.
Et, j'ai également réalisé la diffusion de groupes/sujets basée sur cette idée, qui nécessite que le serveur maintienne des informations supplémentaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X