2012-05-17 22 views
11

Senden einer Nachricht an alle Client funktioniert gut, aber ich möchte Nachricht an bestimmten Benutzernamen senden. Meine server.js Datei sieht wie aus. Was es tut ist, wenn http://localhost:8080 ausgeführt wird, fügt der Client-Code Benutzer zu den Objekt-Benutzernamen sowie in Socket-Objekt hinzu. Und gibt sofort die individuelle Nachricht an jeden der verbundenen Clients zurück.socket.io und node.js, um Nachricht an bestimmten Client zu senden

//var io = require('socket.io').listen(8080); 
var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 
    , fs = require('fs') 
var usernames={}; 
app.listen(8080); 

// on server started we can load our client.html page 
function handler (req, res) { 
    fs.readFile(__dirname + '/client.html' , 
    function (err, data) { 
    if (err) { 
     console.log(err); 
     res.writeHead(500); 
     return res.end('Error loading client.html'); 
    } 
    res.writeHead(200); 
    res.end(data); 
    }); 
}; 
io.set('log level', 1); // reduce logging 
io.sockets.on('connection', function (socket) { 

socket.on('adduser', function(username){ 
     // store the username in the socket session for this client 
     socket.username = username; 
     // add the client's username to the global list 
     usernames[username] = username; 
     // send client to room 1 
     console.log(username+' has connected to the server'); 
     // echo to client they've connected 
    }); 

    socket.on('pmessage', function (data) { 
     // we tell the client to execute 'updatechat' with 2 parameters 
     io.sockets.emit("pvt",socket.username,data+socket.username); // This works 
     io.sockets.socket(socket.username).emit("pvt",socket.username,data+socket.username); // THIS DOESNOT 
    }); 

    socket.on('disconnect', function(){ 
     // remove the username from global usernames list 
     delete usernames[socket.username]; 

     // echo globally that this client has left 
     console.log(socket.username + ' has disconnected'); 
    }); 
}); 

Der Teil, der diese Nachricht

socket.on('pmessage', function (data) { 
     // we tell the client to execute 'updatechat' with 2 parameters 
     io.sockets.emit("pvt",socket.username,data+socket.username); // This works and sends message to all clients 
     io.sockets.socket(socket.username).emit("pvt",socket.username,data+socket.username); // THIS DOESNOT 
    }); 

Antwort

10

Versuchen aussendet:

socket.on('pmessage', function (data) { 
    // we tell the client to execute 'updatechat' with 2 parameters 
    io.sockets.emit("pvt",socket.username,data+socket.username); 
    io.sockets.socket(socket.id).emit("pvt",socket.username,data+socket.username); 
}); 

socket.id wird gespeichert durch socket.io und enthält eindeutige ID Ihres Kunden. können Sie überprüfen, ob mit diesem:

console.log(socket.id); 
+0

TypeError: io.sockets.socket ist keine Funktion –

+0

In 1.0 sollten Sie io.sockets.connected [socketid] .emit(); – milanchandna

1

Sie haben alle Client-IDs zu speichern und nach, dass Sie id von bestimmten Kunden bekommen und dann verwenden Sie folgenden Code

var store={};//this will store all client id and username e.g. store={jay:"34jhjshdj343sasa"} 
socket.on('pmessage', function (data) { 
    var receiverUserName=data.username; 
    var message=data.message; 
    var id = store[receiverUserName];//get ID 
    // we tell the client to execute 'updatechat' with 2 parameters 
    io.sockets.emit("pvt",socket.username,data+socket.username); 
    io.sockets.socket(id).emit("pvt",socket.username,data+socket.username); 
}); 

Dann ist dieser Wille auf bestimmten Client ausgeben

Verwandte Themen