NodeJS Socket.io私人消息代码无法正常工作

时间:2014-02-24 03:04:47

标签: node.js mongodb sockets mongoose chat

我正在尝试开发一个聊天应用,能够发送私信。我已经被困了一个多星期了。私人消息部分无法正常工作。

以下是我的用户想要发送私信时的代码: 它基本上检查用户是否在线,以及是否从用户dict获取该用户的套接字。并将其广播给该用户以及自己发送的用户。

socket.on('send message', function(data, callback){
var msg = data.trim();

var name = req.params.posteruname;

  if(name in users){
   users[name].emit('new message', {msg: msg, nick: socket.nickname});
   users[req.user.username].emit('new message', {msg: msg, nick: socket.nickname});
} 
else{
   callback('Error!  Enter a valid user.');
}


 });

以下是客户端代码:

 socket.on('new message', function(data){
 if(data.nick == "{{reciever}}" || data.nick == "{{user.username}}") {
displayMsg(data);
}
  });

它基本上会再次检查,如果它被广播给接收者或发送者。

以下是新用户加入时的代码:

    socket.on('new user', function(data, callback){
       if (data in users){
          callback(false);
       } else{
      console.log(users);
      callback(true);
      socket.nickname = req.user.username;
      users[socket.nickname] = socket;
      updateNicknames();
      console.log(users);
    }
  });

  function updateNicknames(){
    io.sockets.emit('usernames', Object.keys(users));
  }

每当我尝试发送信息时,它都不会显示在发送者的屏幕上,并且会在接收者的屏幕上显示两次。当第三个用户连接时,发送消息将仅在第三个用户的屏幕上广播,即使它应该在user1和user2之间。

1 个答案:

答案 0 :(得分:0)

嗨我们这个代码服务器端: var socketConnections = {};

socket.on('userID',function(data)
{
   socket.userID=data.userID;
   socketConnections[socket.userID];

});
socket.on('sendMessage',function(data){

         socketConnection[data.receiverID].emit('message',{message:data.message,senderID:socket.userID});
 }); 

客户端代码

socket.emit('userID',{userID:'anyUniqueID'});

socket.emit('sendMessage',{message:'hi this murugan',receiverID:'uniqueReceiverID'});

socket.on('message',function(data){
//Private message     
console.log(data.message);

});