提问者:小点点

如何使用socket.io向客户端发送消息


我知道如何在本地发送消息和广播socket.广播. emit()函数:-所有连接的客户端都会收到相同的消息。

现在,我想知道如何向特定客户发送私人消息,我的意思是一个套接字用于2人之间的私人聊天(客户端到客户端流)。谢谢。


共2个答案

匿名用户

服务器端:

var usersConnectedTo = {};

io.on('connection', function(socket){

socket.on('set_socketid', function(user){
    usersConnectedTo[user] = socket.id; // if usersConnectedTo[user] is undefined
});
socket.on('private_message', function(private_msg){
    var id = usersConnectedTo[private_message.user];
    io.to(id).emit('private_message', private_message.msg);
  });
});

客户端:

io.emit('user', user1+user2); // user should be such that when A connects to B for 
// first time or B connects to B for first time, it should always return same user. 

io.emit('private_message', {
    user: user1+user2,
    msg: 'private_msg'
});

usersConnectedTo变量存储每个私人聊天的socketid。

为了保存(A,B)和(A,C)之间聊天的不同socket.id,socket.id保存为AB和AC。

用户和private_message应该同步发出。

匿名用户

当然:简单地说,

这就是你需要的:

 io.to(socket.id).emit("event", data);

每当用户加入服务器时,将生成包括ID在内的套接字详细信息。这是真正有助于向特定人员发送消息的ID。

首先我们需要将所有socket. id存储在数组中,

  var people={};

  people[name] =  socket.id;

这里name是收件人名称。示例:

 people["trojan"]=2387423cjhgfwerwer23;

所以,现在我们可以在发送消息时使用收件人名称获取该socket.id:

为此,我们需要知道recievername.You需要向服务器发出接收者名称。

最后一件事是:

  socket.on('chat message', function(data){
  io.to(people[data.reciever]).emit('chat message', data.msg);
  });

希望这对你有用祝你好运