我已经实现了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而不是切换:)
任何帮助将不胜感激
最诚挚的问候,
答案 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});
});