Socket.io发射给特定用户

时间:2019-04-25 15:09:41

标签: javascript node.js socket.io

我有两个客户端:客户端1和客户端2。客户端1专门向客户端2发送消息,而没有将消息广播到其余客户端。

从客户端1:

var socket = io();

socket.on("connect", () => {  
  button.addEventListener("click", function() {
     socket.emit("send", {room, message, client1_id, client2_id});
  })
})

客户端2首先将其socket.io会话ID发送到后端,然后等待后端专门发送给客户端2:

var socket = io();

socket.on("connect", () => {
  socket.emit("send_id", (socket.io.engine.id))
  socket.on(client2_id, (data) => {
    console.log(data);
  })
})

Node.js后端:

var tech = io.of("/");

tech.on("connection", (socket) => {
  var receiver_id;
  socket.on("send_id", (data) => {
    receiver_id = data;
  })
  socket.on("send", data => {
    io.to(receiver_id).emit(data.client2_id, "hello");
  })
})

最后,客户端2上没有console.log,如果我将客户端1和2同时加载,则单击按钮。

有人可以告诉我这是怎么回事吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

客户端1发送发射事件时,该事件将由客户端1的thread处理。

这意味着在io.to(receiver_id).emit(data.client2_id, "hello");行中,receiver_id是Client1的套接字的ID。

receiver_id变量不是必需的,因为您在data中有接收者ID。

尝试使用我的代码段:

io.to(data.client2_id).emit(data.client2_id, "hello"); // I think it will be better if you change event name to `direct-message` instead of `data.client2_id`