使用Socket.IO发送pm

时间:2013-08-14 14:38:09

标签: node.js socket.io

我已经实现了Node.js服务器端,ios客户端用于发送pm消息。但主要问题是,我的代码仍然像短信一样为所有客户播放。 (我已尝试过3个电话,我只是向特定客户发送电子邮件,但邮件已经消失了,客户也发送了我发送该消息的电话)

我的服务器代码如下:

io.sockets.on('connection', function (socket) {
  var userName;
  var userSrcID;

  socket.on('setUserName',function(user){
    userName = user.name;
    userSrcID = user.id;
    clients[user.name] = socket;
    clients[user.id] = socket;
    console.log('data = ',user);
    //io.sockets.emit('new user', user.name + " has joined.");
  });

  socket.on('message', function(msg){
    io.sockets.emit('message', msg);
  });

  socket.on('pm', function(msg){
    fromMsg = {from:userSrcID, txt:msg}
    //clients[msg.to].emit('private message', fromMsg);
    console.log('Gidicek username:',userName);
    io.sockets.emit('new message',{msg: msg,destID:userSrcID}); 

我可以建立一个条件,如果该消息的destionation用户id不属于我的用户ID,请不要告诉我,但它更像是使用Old-School HUB Network而不是切换:)

任何帮助将不胜感激

最诚挚的问候,

2 个答案:

答案 0 :(得分:0)

请勿使用io.sockets.emit,而是使用存储在clients数组中的套接字。

当您想要发送给特定用户时,您应该传递用户名或-id以及消息,如下所示:

socket.on('pm', function(message) {
    var to = msg.toUserId;
    var msg = message.message;
    clients[to].emit(msg);
}

来自客户:

socket.emit('pm', {'toUserId': userid, 'message': 'hello over there'});

答案 1 :(得分:0)

您可以将消息作为对象发送,因此您可以在其中包含接收者用户ID。你可以检索接收器套接字,然后向该特定用户发送消息。

它看起来像这样。

// assuming msg object would look something like this
// msg = { text: 'message text', receiverID: 123 };  

socket.on('pm', function(msg){
    var userSocket = clients[msg.receiverID];
    userSocket.emit('new message',{msg: msg.text, destID:userSrcID}); 
});