我正在尝试开发一个聊天应用,能够发送私信。我已经被困了一个多星期了。私人消息部分无法正常工作。
以下是我的用户想要发送私信时的代码: 它基本上检查用户是否在线,以及是否从用户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之间。
答案 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);
});