Friday 9 June 2017

How can I send data to a specific socket?

My problem is that the current solution I have for sending a specific socket using the library "ws" with node.js is not good enough.

The reason is because if I connect with multiple tabs to the websocket server with the same userid which is defined on the client-side, it will only refer to the latest connection with the userid specified.

This is my code:

// Server libraries and configuration   
var server = require("ws").Server;
var s = new server({ port: 5001});

// An array which I keep all websockets clients
var search = {};

s.on("connection", function(ws, req) {
  ws.on("message", function(message){
    // Here the server process the user information given from the client
    message = JSON.parse(message);
    if(message.type == "userinfo"){
      ws.personName = message.data;
      ws.id = message.id;
      // Defining variable pointing to the unique socket
      search[ws.id] = ws;
      return;
    }
  })
})

As you can see, each time a socket with same id connects, it will refer to the latest one.

Example If you did not understand:

  1. Client connect to server with ID: 1337
  2. search[1337] defined as --> websocket 1
  3. A new connection with same ID: 1337
  4. search[1337] becomes instead a variable refering to websocket 2 instead


via Hezka

No comments:

Post a Comment