0

我已经实现了 Node.js 服务器端和 ios 客户端来发送 pm message 。但主要问题是,我的代码仍然像文本消息一样为所有客户端广播。(我在 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}); 

我可以建立一个条件,如果该消息的目标用户 ID 不属于我的用户 ID,请不要显示,但它更像是使用 Old-School HUB 网络而不是 switch :)

任何帮助将不胜感激

最好的祝福 ,

4

2 回答 2

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'});
于 2013-08-14T14:45:18.853 回答
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}); 
});
于 2013-08-14T14:51:34.630 回答