Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

How to get socket client for a user?

How to get socket client for a user?


I'm implementing a node.js server that manages bi-connections between users with (version:0.8.7). I use an array that stores the users that have no chat partners yet. When a user requests a new partner, the app picks a user in this array and then checks to see if the user is still connected. And here's my problem:

I can't manage to get the socket client for the user, even if the user is still connected. Here's a snippet of my code:

// An array of users that do not have a chat partner
var soloUsers = [];

var io = sio.listen(app);

io.sockets.on('connection', function (socket) {

    socket.on('sessionStart', function (message) 
        // Parse the incoming event
        switch (message.event) {

            // User requested initialization data
            case 'initial':

        // User requested next partner
        case 'next':

        // Create a "user" data object for me
        var me = {
            clientId: socket.sessionid

        var partner;
        var partnerClient;

        // Look for a user to partner with in the list of solo users
        for (var i = 0; i 

I get the following error:

partnerClient = io.sockets.clientsIndex[clientId];
TypeError: Cannot read property 'undefined' of undefined

I did an output (console.log) of the clientId, and it is definitely indefined. Furthermore, I think the API might have changed in version 0.8, and you can't use the "clientsIndex" method anymore. Does anyone know the replacement?


Problem courtesy of: Michael Eilers Smith


The best thing to do is to keep track of the connected clients in an object. Here's how I would achieve this:

var clients = {};

io.sockets.on('connection', function (socket) {
  // remember the client by associating the with the socket
  clients[] = socket; 
  socket.on('sessionStart', function (message) {
    // get the of the partner on each message
    var partner = message.from; 
    if (clients[partner]) {
      // check if the partner exists and send a message to the user
      clients[].emit('message', { from: partner, msg: message });

  socket.on('disconnect', function() {
    delete clients[]; // delete the client from the list

Note: In a real production application you would normally check for the session data and associate each client with a username and a

Solution courtesy of: alessioalex


View additional discussion.

This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

How to get socket client for a user?


Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription