Nodejs Socket.io 从 on("connection") 事件获取用户

Nodejs Socket.io getting user from on("connection") event

有没有办法从 socket.io 连接事件中确定用户?

以下代码用于当前从前端获取用户对象:

io.on("connection", async (socket: Socket) => {
  socket.on("user-joined", (user) => {
    console.log("front end says hi", user);
    connectedUsers.push(user);
  });
});

我想知道是否有一种方法可以在连接事件中立即传递用户,这样我就不必收听后续 'user-joined' 消息?

在客户端,我们似乎可以将 auth 与连接一起传递。

来自https://socket.io/docs/v4/client-initialization/#auth

import { io } from "socket.io-client";

const socket = io({
  auth: {
    user: "abcd"
  }
});

解决方案类似于:

io.on("connection", async (socket: Socket) => {
  console.log("front end says hi", socket.handshake.auth); // prints { user: "abcd" }
});

我能否将数据与“连接”消息一起传递以识别正在连接的用户?

谢谢

是的,可以在初始连接事件中识别用户。

开始:客户端必须使用选项参数初始化套接字连接。选项应包括指定用户的 auth 属性。

例如在客户端:

import { io } from "socket.io-client";

const socket = io({
  auth: {
    user: "abcd"
  }
});

在服务器端,我们可以读取连接事件处理程序中的 auth 数据:

io.on("connection", async (socket: Socket) => {
  console.log("front end says hi", socket.handshake.auth); 
  // prints "front end says hi", { user: "abcd" }
});

您可能还会发现这个 link 对官方文档有帮助:https://socket.io/docs/v4/client-initialization/#auth