【发布时间】:2014-03-25 13:13:12
【问题描述】:
我正在尝试开发一个能够发送私人消息的聊天应用程序。我已经被困了一个多星期了。私人消息部分无法正常工作。
当用户想要发送私人消息时,这是我的代码: 它基本上检查用户是否在线,以及是否从用户字典中获取该用户的套接字。并将其广播给该用户以及自己发送它的用户。
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 之间。
【问题讨论】:
标签: node.js mongodb sockets mongoose chat