我试图从服务器套接字中获取连接计数,该服务器是在远离客户端应用程序的地方设置的,我参考了几篇引用不同方法获取套接字连接计数的SO文章,但没有一篇能让我实现。
最近引用的文章在这里:Socket。IO已连接用户数
我在这里尝试了最新的答案,他们似乎都不想返回正确的信息。我也有,从我所看到的,总是一个额外的连接,我console。logio
对象,看看里面是什么,我发现id
的连接,我在套接字,但我总是看到一个额外的套接字连接在那里,不确定我是否创建多个连接或服务器计数自己?
这是我的io.sockets.sockets
的控制台日志(因为我正在尝试链接文章中的示例):
<ref *1> Map(2) {
[0] 'tX7QE_wHuTtv_nSWAAAG' => Socket {
[0] _events: [Object: null prototype] {
[0] setup: [Function (anonymous)],
[0] getConnectedUsers: [Function (anonymous)],
[0] disconnect: [Function (anonymous)]
[0] },
[0] _eventsCount: 3,
[0] _maxListeners: undefined,
[0] nsp: Namespace {
[0] _events: [Object: null prototype],
[0] _eventsCount: 1,
[0] _maxListeners: undefined,
[0] sockets: [Circular *1],
[0] _fns: [],
[0] _ids: 0,
[0] server: [Server],
[0] name: '/',
[0] adapter: [Adapter],
[0] [Symbol(kCapture)]: false
[0] },
[0] client: Client {
[0] sockets: [Map],
[0] nsps: [Map],
[0] server: [Server],
[0] conn: [Socket],
[0] encoder: [Encoder],
[0] decoder: [Decoder],
[0] id: 'sxkZ2zf2364ptRpkAAAE',
[0] onclose: [Function: bound onclose],
[0] ondata: [Function: bound ondata],
[0] onerror: [Function: bound onerror],
[0] ondecoded: [Function: bound ondecoded],
[0] connectTimeout: undefined
[0] },
[0] data: {},
[0] connected: true,
[0] acks: Map(0) {},
[0] fns: [],
[0] flags: {},
[0] server: Server {
[0] _events: [Object: null prototype] {},
[0] _eventsCount: 0,
[0] _maxListeners: undefined,
[0] _nsps: [Map],
[0] parentNsps: Map(0) {},
[0] _path: '/socket.io',
[0] clientPathRegex: /^/socket.io/socket.io(.msgpack|.esm)?(.min)?.js(.map)?(?:?|$)/,
[0] _connectTimeout: 45000,
[0] _serveClient: true,
[0] _parser: [Object],
[0] encoder: [Encoder],
[0] _adapter: [class Adapter extends EventEmitter],
[0] sockets: [Namespace],
[0] opts: [Object],
[0] eio: [Server],
[0] httpServer: [Server],
[0] engine: [Server],
[0] [Symbol(kCapture)]: false
[0] },
[0] adapter: Adapter {
[0] _events: [Object: null prototype] {},
[0] _eventsCount: 0,
[0] _maxListeners: undefined,
[0] nsp: [Namespace],
[0] rooms: [Map],
[0] sids: [Map],
[0] encoder: [Encoder],
[0] [Symbol(kCapture)]: false
[0] },
[0] id: 'tX7QE_wHuTtv_nSWAAAG',
[0] handshake: {
[0] headers: [Object],
[0] time: 'Sat Dec 24 2022 17:37:59 GMT-0500 (Eastern Standard Time)',
[0] address: '::1',
[0] xdomain: true,
[0] secure: false,
[0] issued: 1671921479323,
[0] url: '/socket.io/?EIO=4&transport=polling&t=OL6IIvl',
[0] query: [Object: null prototype],
[0] auth: {}
[0] },
[0] [Symbol(kCapture)]: false
[0] },
[0] 'Fd0eZg47FOQ7kqKJAAAH' => Socket {
[0] _events: [Object: null prototype] {
[0] setup: [Function (anonymous)],
[0] getConnectedUsers: [Function (anonymous)],
[0] disconnect: [Function (anonymous)]
[0] },
[0] _eventsCount: 3,
[0] _maxListeners: undefined,
[0] nsp: Namespace {
[0] _events: [Object: null prototype],
[0] _eventsCount: 1,
[0] _maxListeners: undefined,
[0] sockets: [Circular *1],
[0] _fns: [],
[0] _ids: 0,
[0] server: [Server],
[0] name: '/',
[0] adapter: [Adapter],
[0] [Symbol(kCapture)]: false
[0] },
[0] client: Client {
[0] sockets: [Map],
[0] nsps: [Map],
[0] server: [Server],
[0] conn: [Socket],
[0] encoder: [Encoder],
[0] decoder: [Decoder],
[0] id: 'WmPBukQtun1HRsXlAAAF',
[0] onclose: [Function: bound onclose],
[0] ondata: [Function: bound ondata],
[0] onerror: [Function: bound onerror],
[0] ondecoded: [Function: bound ondecoded],
[0] connectTimeout: undefined
[0] },
[0] data: {},
[0] connected: true,
[0] acks: Map(0) {},
[0] fns: [],
[0] flags: {},
[0] server: Server {
[0] _events: [Object: null prototype] {},
[0] _eventsCount: 0,
[0] _maxListeners: undefined,
[0] _nsps: [Map],
[0] parentNsps: Map(0) {},
[0] _path: '/socket.io',
[0] clientPathRegex: /^/socket.io/socket.io(.msgpack|.esm)?(.min)?.js(.map)?(?:?|$)/,
[0] _connectTimeout: 45000,
[0] _serveClient: true,
[0] _parser: [Object],
[0] encoder: [Encoder],
[0] _adapter: [class Adapter extends EventEmitter],
[0] sockets: [Namespace],
[0] opts: [Object],
[0] eio: [Server],
[0] httpServer: [Server],
[0] engine: [Server],
[0] [Symbol(kCapture)]: false
[0] },
[0] adapter: Adapter {
[0] _events: [Object: null prototype] {},
[0] _eventsCount: 0,
[0] _maxListeners: undefined,
[0] nsp: [Namespace],
[0] rooms: [Map],
[0] sids: [Map],
[0] encoder: [Encoder],
[0] [Symbol(kCapture)]: false
[0] },
[0] id: 'Fd0eZg47FOQ7kqKJAAAH',
[0] handshake: {
[0] headers: [Object],
[0] time: 'Sat Dec 24 2022 17:37:59 GMT-0500 (Eastern Standard Time)',
[0] address: '::1',
[0] xdomain: true,
[0] secure: false,
[0] issued: 1671921479330,
[0] url: '/socket.io/?EIO=4&transport=polling&t=OL6IIvr',
[0] query: [Object: null prototype],
[0] auth: {}
[0] },
[0] [Symbol(kCapture)]: false
[0] }
[0] }
我试图把它变成一个简单的数组,我可以用它来发送回一个数字给客户端。这个特殊的连接被记录为连接Fd0eZg47FOQ7kqKJAAAH
,我不确定另一个连接是什么,它不可能是另一个用户,套接字还没有部署到生产中。
如何将其转换为数组?我试过:Object.keys(io.sockets.sockets).length
,但它只是返回一个空数组。
所以我通过简单地根据传入的数据将套接字连接添加到房间来修复此问题。例如,我在这个应用程序中有几个管理员,我想知道有多少管理员在同一时间连接到面板。所以,而不是看连接到服务器的数量,由于某种原因,每1连接增加2个连接,我只是把userdata传递回服务器,并将该用户添加到一个房间,然后我使用Array.from(await io.in('adminRoom').allSockets()) || []
查看我想要定义的房间,并返回所有的套接字回到一个数组,如果它是空的或null,它只是默认为一个空数组,即0连接。