socket.io和node.js发送消息到特定的客户端

发送消息到所有的客户端运作良好,但我想发送消息到特定的用户名。 我的server.js文件看起来像。 当它运行http://localhost:8080 ,客户端代码将用户添加到对象用户名以及套接字对象中。 并立即将个别消息返回给每个连接的客户端。

 //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'); }); }); 

发出消息的部分

 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 }); 

尝试这个:

 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由socket.io保存,它包含客户端的唯一ID。 你可以使用这个来检查:

 console.log(socket.id); 

你必须存储所有的客户端ID,并根据你必须得到特定客户端的ID,然后使用下面的代码

 var store={};//this will store all client id and username eg 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); }); 

然后这将发射在特定的客户端