管理界面

Socket.IO 管理 UI 可用于概述 Socket.IO 部署的状态。

源代码可以在这里找到:https://github.com/socketio/socket.io-admin-ui/

链接到托管版本:https://admin.socket.io/

当前功能

  • 当前连接的服务器和客户端的概述

dashboard screenshot

  • 每个socket实例的详细信息(主动传输、握手、房间……)

socket details screenshot

  • 每个房间的细节

room details screenshot

  • 管理操作(加入、离开、断开连接)

如果您有任何反馈/建议,请不要犹豫!

安装

服务器端

首先,安装@socket.io/admin-ui软件包:

  1. npm i @socket.io/admin-ui

然后调用Socket.IO 服务器上的方法instrument

  1. const { createServer } = require("http");
  2. const { Server } = require("socket.io");
  3. const { instrument } = require("@socket.io/admin-ui");
  4. const httpServer = createServer();
  5. const io = new Server(httpServer, {
  6. cors: {
  7. origin: ["https://admin.socket.io"],
  8. credentials: true
  9. }
  10. });
  11. instrument(io, {
  12. auth: false
  13. });
  14. httpServer.listen(3000);

该模块兼容:

  • Socket.IO v4 服务器
  • Socket.IO v3 服务器 (>= 3.1.0)),但没有对房间的操作(加入、离开、断开连接)

客户端

然后,您可以前往https://admin.socket.io,或托管在此处ui/dist夹中的文件。

重要提示: https://admin.socket.io 上的网站是完全静态的(托管在 Vercel上),我们不会(也永远不会)存储有关您自己或您的浏览器的任何信息(没有跟踪,没有分析,…… )。话虽如此,自己托管文件完全没问题。

您应该看到以下模式:

login modal screenshot

请输入您的服务器的 URL(例如,http://localhost:3000/adminhttps://example.com/admin) )和凭据(如果适用)(请参阅 下方auth的配置)。

可用配置

auth

默认值:-

此选项是强制性的。您可以禁用身份验证(请谨慎使用):

  1. instrument(io, {
  2. auth: false
  3. });

或使用基本身份验证:

  1. instrument(io, {
  2. auth: {
  3. type: "basic",
  4. username: "admin",
  5. password: "$2b$10$heqvAkYMez.Va6Et2uXInOnkCT6/uQj1brkrbyG3LpopDklcq7ZOS" // "changeit" encrypted with bcrypt
  6. },
  7. });

警告!请注意,该bcrypt包目前不支持以$2y$前缀开头的哈希,某些 BCrypt 实现使用该前缀(例如https://bcrypt-generator.com/https://www.bcrypt.fr/)。您可以使用以下方法检查哈希的有效性:

  1. $ node
  2. > require("bcrypt").compareSync("<the password>", "<the hash>")
  3. true

您可以使用以下方法生成有效哈希:

  1. $ node
  2. > require("bcrypt").hashSync("changeit", 10)
  3. '$2b$10$LQUE...'

也可以看看:

namespaceName

默认值:/admin

为处理管理任务而创建的命名空间的名称。

  1. instrument(io, {
  2. namespaceName: "/custom"
  3. });

这个命名空间是一个经典的 Socket.IO 命名空间,你可以通过以下方式访问它:

  1. const adminNamespace = io.of("/admin");

更多信息在这里.

readonly

默认值:false

是否将管理 UI 置于只读模式(不允许加入、离开或断开连接)。

  1. instrument(io, {
  2. readonly: true
  3. });

serverId

默认值:require("os").hostname()

给定服务器的 ID。如果你在同一台机器上有多个 Socket.IO 服务器,你需要给它们一个不同的 ID:

  1. instrument(io, {
  2. serverId: `${require("os").hostname()}#${process.pid}`
  3. });

store

默认值:new InMemoryStore()

该存储用于存储会话 ID,因此用户不必在重新连接时重新键入凭据。

如果您在多服务器设置中使用基本身份验证,则应提供自定义存储:

  1. const { instrument, RedisStore } = require("@socket.io/admin-ui");
  2. instrument(io, {
  3. store: new RedisStore(redisClient)
  4. });

mode

默认值:development

在生产模式下,服务器不会发送有关套接字实例和房间的所有详细信息,从而减少检测的内存占用。

  1. instrument(io, {
  2. mode: "production"
  3. });

也可以使用 NODE_ENV 环境变量启用生产模式:

  1. NODE_ENV=production node index.js

这个怎么运作

源代码可以在这里找到:https://github.com/socketio/socket.io-admin-ui/

instrument方法很简单:

  • 创建命名空间并添加身份验证中间件(如果适用)
  • 为每个现有命名空间注册connectiondisconnect事件的侦听器以跟踪socket实例
  • 注册一个计时器,它会定期从服务器向 UI 发送统计信息
  • joinweaw_disconnect从 UI 发送的命令注册处理程序

最新版本