首页 > 解决方案 > 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");
  })
})

最后Client 2没有console.log,如果我同时加载Client 1和2,然后点击按钮。

有人可以告诉我这里出了什么问题吗?

谢谢你的帮助。

标签: javascriptnode.jssocket.io

解决方案


当Client 1 发送emit 事件时,该事件将由threadClient1 处理。

这意味着,在 line 中io.to(receiver_id).emit(data.client2_id, "hello");,有receiver_idClient1 的套接字的 id。

receiver_id变量不是必需的,因为您在data.

尝试使用我的代码段:

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`

推荐阅读