2012-05-17 167 views
11

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

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

回答

10

的部分试试这个:

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); 
+0

TypeError:io.sockets.socket不是函数 –

+0

在1.0中,您应该使用 io.sockets.connected [socketid] .emit(); – milanchandna

1

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

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

,那么这将在特定客户端发射

相关问题