管理UI
Socket.IO 管理UI は、Socket.IO デプロイの状態の概要を確認するために使用できます。
ソースコードはこちらにあります: https://github.com/socketio/socket.io-admin-ui/
ホストされているバージョンのリンク: https://admin.socket.io/
現在の機能
- 現在接続されているサーバーとクライアントの概要
- 各ソケットインスタンスの詳細(アクティブなトランスポート、ハンドシェイク、ルームなど)
- 各ルームの詳細
- サーバーによって送受信されたすべてのイベントの詳細
- 管理操作(参加、退出、切断)
フィードバック/ご提案がありましたら、お気軽にご連絡ください!
インストール
サーバーサイド
最初に、@socket.io/admin-ui
パッケージをインストールします。
npm i @socket.io/admin-ui
次に、Socket.IOサーバーでinstrument
メソッドを呼び出します。
const { createServer } = require("http");
const { Server } = require("socket.io");
const { instrument } = require("@socket.io/admin-ui");
const httpServer = createServer();
const io = new Server(httpServer, {
cors: {
origin: ["https://admin.socket.io"],
credentials: true
}
});
instrument(io, {
auth: false,
mode: "development",
});
httpServer.listen(3000);
このモジュールは、以下と互換性があります。
- Socket.IO v4 サーバー
- Socket.IO v3 サーバー(>= 3.1.0)、ただしルームでの操作(参加、退出、切断)はできません。
NestJS の例
import { instrument } from "@socket.io/admin-ui";
@WebSocketGateway()
export class MyGateway {
// ...
afterInit() {
instrument(this.server, {
auth: false,
mode: "development",
});
}
}
クライアントサイド
https://admin.socket.io にアクセスするか、ui/dist
フォルダにあるファイルをホストできます。こちら。
重要な注記: https://admin.socket.io のウェブサイトは完全に静的です(Vercel でホストされています)。ユーザーまたはブラウザに関する情報は一切保存しません(トラッキングなし、分析なしなど)。そのため、ご自身でファイルをホストしても問題ありません。
次のモーダルが表示されます。
サーバーのURL(例:http://localhost:3000
またはhttps://example.com
)と必要に応じて認証情報を入力してください(auth
オプション下記を参照)。
使用可能なオプション
auth
デフォルト値: -
このオプションは必須です。認証を無効にすることができます(注意して使用してください)。
instrument(io, {
auth: false
});
または、ベーシック認証を使用します。
instrument(io, {
auth: {
type: "basic",
username: "admin",
password: "$2b$10$heqvAkYMez.Va6Et2uXInOnkCT6/uQj1brkrbyG3LpopDklcq7ZOS" // "changeit" encrypted with bcrypt
},
});
bcrypt
パッケージは現在、一部のBCrypt実装(例:https://bcrypt-generator.com/またはhttps://www.bcrypt.fr/)で使用されている$2y$
プレフィックスで始まるハッシュをサポートしていません。ハッシュの有効性を確認するには、
$ node
> require("bcryptjs").compareSync("<the password>", "<the hash>")
true
有効なハッシュを生成するには、
$ node
> require("bcryptjs").hashSync("changeit", 10)
'$2b$10$LQUE...'
こちらも参照してください。
namespaceName
デフォルト値: /admin
管理タスクを処理するために作成される名前空間の名前。
instrument(io, {
namespaceName: "/custom"
});
この名前空間は従来のSocket.IO名前空間であり、以下を使用してアクセスできます。
const adminNamespace = io.of("/admin");
詳細はこちら こちら。
readonly
デフォルト値: false
管理UIを読み取り専用モードにするかどうか(参加、退出、切断は許可されません)。
instrument(io, {
readonly: true
});
serverId
デフォルト値: require("os").hostname()
指定されたサーバーのID。同じマシン上に複数のSocket.IOサーバーがある場合は、それぞれに異なるIDを付ける必要があります。
instrument(io, {
serverId: `${require("os").hostname()}#${process.pid}`
});
store
デフォルト値: new InMemoryStore()
ストアはセッションIDを保存するために使用され、ユーザーは再接続時に認証情報を再入力する必要がありません。
マルチサーバー設定でベーシック認証を使用する場合は、カスタムストアを提供する必要があります。
const { instrument, RedisStore } = require("@socket.io/admin-ui");
instrument(io, {
store: new RedisStore(redisClient)
});
mode
デフォルト値: development
本番モードでは、サーバーはソケットインスタンスとルームに関するすべての詳細を送信しないため、インストゥルメンテーションのメモリフットプリントが削減されます。
instrument(io, {
mode: "production"
});
本番モードは、NODE_ENV環境変数でも有効にできます。
NODE_ENV=production node index.js
動作方法
ソースコードはこちらにあります: https://github.com/socketio/socket.io-admin-ui/
instrument
メソッドは、単に
- 名前空間を作成し、必要に応じて認証ミドルウェアを追加します。
- 既存の名前空間ごとに
connection
およびdisconnect
イベントのリスナーを登録して、ソケットインスタンスを追跡します。 - サーバーからUIに定期的に統計情報を送信するタイマーを登録します。
- UIから送信された
join
、leave
、_disconnect
コマンドのハンドラーを登録します。
最新のリリース
0.5.1
(2022年10月): GitHub リリース / 差分0.5.0
(2022年9月): GitHub リリース / 差分0.4.0
(2022年6月): GitHub リリース / 差分