首页 > 解决方案 > 尝试遍历所有连接的 socket.io 套接字以获取与套接字关联的用户名,但我遇到了一些麻烦

问题描述

我所有的套接字都有一个名为用户名的属性。我正在尝试遍历所有套接字并 console.log 该套接字的用户名,但是,当我尝试这样做时,我 console.log 该套接字的 id 我不确定为什么。这就是我循环它的方式:

for (connectedSocket in io.sockets.connected) {
    console.log(connectedSocket)
}

这会记录套接字的 id - fnaADLbrz9wTiwhwAAAC。我期待看到一个对象,它有一个名为的属性username,我可以像这样访问它connectedSocket.username

当我 console.log io.sockets.connected 时,我看到:

{
fnaADLbrz9wTiwhwAAAC: Socket {
    nsp: Namespace {
      name: '/',
      server: [Server],
      sockets: [Object],
      connected: [Circular],
      fns: [],
      ids: 0,
      rooms: [],
      flags: {},
      adapter: [Adapter],
      _events: [Object: null prototype],
      _eventsCount: 1
    },
    server: Server {
      nsps: [Object],
      parentNsps: Map {},
      _path: '/socket.io',
      _serveClient: true,
      parser: [Object],
      encoder: Encoder {},
      _adapter: [Function: Adapter],
      _origins: '*:*',
      sockets: [Namespace],
      eio: [Server],
      httpServer: [Server],
      engine: [Server]
    },
    adapter: Adapter {
      nsp: [Namespace],
      rooms: [Object],
      sids: [Object],
      encoder: Encoder {}
    },
    id: 'fnaADLbrz9wTiwhwAAAC',
    client: Client {
      server: [Server],
      conn: [Socket],
      encoder: Encoder {},
      decoder: [Decoder],
      id: 'fnaADLbrz9wTiwhwAAAC',
      request: [IncomingMessage],
      onclose: [Function: bound ],
      ondata: [Function: bound ],
      onerror: [Function: bound ],
      ondecoded: [Function: bound ],
      sockets: [Object],
      nsps: [Object],
      connectBuffer: []
    },
    conn: Socket {
      id: 'fnaADLbrz9wTiwhwAAAC',
      server: [Server],
      upgrading: false,
      upgraded: true,
      readyState: 'open',
      writeBuffer: [],
      packetsFn: [],
      sentCallbackFn: [],
      cleanupFn: [Array],
      request: [IncomingMessage],
      remoteAddress: '::1',
      checkIntervalTimer: null,
      upgradeTimeoutTimer: null,
      pingTimeoutTimer: Timeout {
        _idleTimeout: 30000,
        _idlePrev: [TimersList],
        _idleNext: [Timeout],
        _idleStart: 3591,
        _onTimeout: [Function],
        _timerArgs: undefined,
        _repeat: null,
        _destroyed: false,
        [Symbol(refed)]: true,
        [Symbol(asyncId)]: 142,
        [Symbol(triggerId)]: 122
      },
      transport: [WebSocket],
      _events: [Object: null prototype],
      _eventsCount: 3
    },
    rooms: { fnaADLbrz9wTiwhwAAAC: 'fnaADLbrz9wTiwhwAAAC' },
    acks: {},
    connected: true,
    disconnected: false,
    handshake: {
      headers: [Object],
      time: 'Fri May 01 2020 03:08:48 GMT+0300 (Eastern European Summer Time)',
      address: '::1',
      xdomain: true,
      secure: false,
      issued: 1588291728124,
      url: '/socket.io/?EIO=3&transport=polling&t=N7Da7Bu',
      query: [Object]
    },
    fns: [],
    flags: {},
    _rooms: [],
    _events: [Object: null prototype] {
      setSocketUsername: [Function],
      disconnect: [Function],
      message: [Function]
    },
    _eventsCount: 3,
    username: 'hey'
  }
}

这就是为什么我不明白为什么我在遍历套接字时只看到 id 的原因。

标签: javascriptsocket.io

解决方案


推荐阅读