如何在用户连接时获取用户的 socket.id?

How can I get the socket.id of a user when they connect?

我想在用户连接时向他们广播一条消息,但只向该用户广播。
我如何在他们连接时获取他们的套接字 ID,以便我可以使用 io.to(theirSocketID).emit('chat message', 'Welcome');?

您可以将每次用户连接时的数据存储在数组中

  var clients = [];

io.on("connection", (socket) => {
  console.log("new user connected");
  socket.on("new user", function (data) {
    // console.log(clients[data])
    if (data in clients) {
      let index = clients.indexOf(data);
      if (index !== -1) {
        clients.splice(index, 1);
      }
      socket.nickname = data;
      clients[socket.nickname] = socket;
    } else {
      socket.nickname = data;
      clients[socket.nickname] = socket;
    }
    console.log("new user : " + socket.nickname);
  });

并在断开连接时

 socket.on("disconnect", () => {
    console.log("user disconnected");
    delete clients[socket.nickname];
  });

这就是我为私人消息存储套接字 ID 时常做的事情

这是我的聊天套接字的样子

socket.on("chat", function (data) {
    var id = data.id;
    if (clients.hasOwnProperty(id)) {
      io.to(clients[id]["id"]).emit("chat", data);
      console.log(clients[id]["id"]);
    } else {
      console.log("\nTarget Device Is Offline or Doesn't exist\n ");
  });

如果目标已连接或未连接,您也可以实现已读/未读