Javascript Socket.io不向特定用户发送消息

Javascript Socket.io不向特定用户发送消息,javascript,node.js,reactjs,socket.io,Javascript,Node.js,Reactjs,Socket.io,我有一个带有node.js、socket io和React.js的聊天应用程序。问题:私人消息功能不起作用 客户端: socket.emit("chat message private", { userIDtoReceiveTheMessage, msg }); 然后,我的服务器将侦听并向该特定用户发送: socket.on("chat message private", ({ toUser, msg }) => { console.l

我有一个带有node.js、socket io和React.js的聊天应用程序。问题:私人消息功能不起作用

客户端:

socket.emit("chat message private", { userIDtoReceiveTheMessage, msg });
然后,我的服务器将侦听并向该特定用户发送:

  socket.on("chat message private", ({ toUser, msg }) => {
    console.log(`from ${id} to ${toUser}: ${msg}`);
    let socketId = toUser;
    io.to(socketId).emit("private msg", msg);
  });
服务器控制台上的结果是: “从X到Y:消息”(这是工作!)

我的客户应该收到“msg”,但什么也没发生:

  useEffect(() => {
    socket.on("chat message", ({ nickname, msg }) => {
      setChat([...chat, { nickname, msg }]);
    });

    socket.on("private msg", (msg) => {
      console.log(msg);
      setChat([...chat, msg]);
    });

    return () => {
      socket.off();
    };
  }, [chat, toUser]);
对于特定用户(或任何用户),控制台上不会显示任何内容

PS:所有其他聊天信息都是实时接收的。唯一的问题是那些使用:

io.to(socketId).emit("private msg", msg);

有什么建议吗?

最后,我找到了答案

我仍在试图找出原因,但在服务器上,每个新连接都有两个不同的ID:

io.on("connection", (socket) => {...
“套接字”具有:

  • socket.client.id
  • socket.id
要为特定套接字发出,请使用此行上的ID:

io.to(socketId).emit("private msg", msg);
需要是socket.id,而不是socket.client.id

我找不到任何与为什么每个插座都有2个不同ID有关的信息