I know it's very popular question, but i didn't find answer for my question. Very similar question: socket.IO: how can i get the socketid when i emit to a specific client in socket.io 1.0
I want emit to a specific client with socketId, But i get an error, see below.
socket.join( gameId );
io.sockets.connected( opponent ).join( gameId );
socket.emit( 'ready', gameId, 'X', x, y );
io.sockets.connected( opponent ).emit( 'ready', gameId, 'O', x, y );
Error:
          io.sockets.connected( opponent ).join( gameId );
                     ^
TypeError: Property 'connected' of object #<Namespace> is not a function
Please help me.
Forgot to say that, impossible to use .join(gameId) with io.to(socket.id) 
				
				To join a room
socket.on('someEventName', function(Param){
    try {
        socket.join('A_Temporary_Room');    
    } catch(err) {
        console.log(err);
    }
});
To send a message to all members in this room
io.sockets.in('A_Temporary_Room').emit('ready', 'String');
EDIT
socket.on('setId', function(SocketId) {
    socket.set('socketId', SocketId, function(data){
        //callback
        /* Here you can maintain an array of all connected clients like
            clients[SocketId].push(socket); Where clients is an object.
         */
    });
});
Now to emit an event to a specific client use this
clients[SocketId].emit('PrivateMessage', 'This is a private message');
				
			I'm not sure if I totally get your question, but you can emit to a specific socket id by emitting to the default room of the socket. Every socket is joining a default room with the id of the socket as name.