javascript - 尝试遍历所有连接的 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 的原因。
解决方案
推荐阅读
- ios - MTLDevice 类需要 id<>
- authentication - 无法创建操作“你好”:提供的身份验证无效
- android - 实施重要运动传感器的正确方法是什么?
- tensorflow - Keras 和 tensorflow 急切执行
- ldap - 如何组织 LDAP 组和帐户?
- sql - 如何使用 SQL 查询转换字符串中的日期格式?
- html - 这是CSS中的错误吗?
- android - HandlerThread 抛出 RuntimeException 每个线程只能创建一个 Looper
- mysql - 将大量数据从 MySQL 导入 Elasticsearch
- html - CSS 的替代方案:有伪类吗?