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

时间:2016-03-19 14:20:07

标签: socket.io

我知道如何发送消息localy和广播socket.broadcast.emit()功能: - 所有连接的客户端都收到相同的消息。

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

2 个答案:

答案 0 :(得分:1)

服务器端:

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。

user和private_message应该同步发出。

答案 1 :(得分:0)

确定:简单,

这就是你需要的:

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

每当用户加入服务器时,都会生成包含ID的套接字详细信息。这个ID确实有助于向特定人员发送消息。

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

  var people={};

  people[name] =  socket.id;

此处名称是接收者名称。例如:

 people["trojan"]=2387423cjhgfwerwer23;

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

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

最后一件事是:

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

希望这适合你。!!祝你好运