【问题标题】:Socket.io not emitting messages to a specific userSocket.io 不向特定用户发送消息
【发布时间】:2021-04-10 20:25:56
【问题描述】:

我有一个带有 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);

有什么建议吗?

【问题讨论】:

    标签: javascript node.js reactjs socket.io


    【解决方案1】:

    终于,我找到了答案。

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

    io.on("connection", (socket) => {...
    

    “socket”有:

    • socket.client.id
    • socket.id

    要为特定套接字发出,此行上的 ID:

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

    需要是 socket.id,而不是 socket.client.id。

    我找不到任何与为什么每个套接字都有 2 个不同 ID 相关的信息。

    【讨论】:

      猜你喜欢
      • 2012-07-08
      • 2014-08-14
      • 1970-01-01
      • 2012-05-24
      • 2015-08-06
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      相关资源
      最近更新 更多