通常マルチプレイヤーにマルチノード選択と管理画面を追加 #1

Closed
Superories wants to merge 0 commits from superories/multiplayer-multi-node into main AGit
Collaborator

概要

この PR は、Ranked Match を含めない通常 multiplayer のために、複数 relay node の選択と管理を追加します。同じ relay を複数サイトから共有でき、招待されたプレイヤーは room が作成された同一 node に接続されます。

変更内容

  • MongoDB に multiplayer_servers collection と node index を追加します。
  • /api/multiplayer/select で、health、capacity、latency と stable client ID に基づく node selection を提供します。
  • 12文字の共有 Node ID を含む #p2=<node_id>:<invite> 形式を追加します。
  • P2Connection を asynchronous selector / WebSocket open に対応させ、opening 中の message queue と close cleanup を追加します。
  • level 100 admin のために、node Add / Edit / Test / Enable / Disable / Remove UI を追加します。
  • health request は DNS pinning、TLS hostname check、redirect refusal と private-address rejection を使用します。
  • Redis health cache が利用できない場合は direct probe に fallback します。
  • 管理用 POST だけに route-local CSRF protection を有効化します。

テスト

  • python -m unittest discover -s tests -v — 7 tests passed
  • Python compile check
  • 51 JavaScript files の node --check
  • 7 Jinja templates の parse check
  • level 100 admin UI で2 node の health test を確認
  • Chrome の2つの独立 tab で selector、invite、session、songsel、gameload、gamestart、note、gameresults、gameend を確認
  • relay health connections が 0 → 2 → 0 になることを確認
  • Edge で title screen から song select と main.ogg load まで確認

スコープの外

  • Ranked Match、Elo、reservation capacity は追加しません。
  • relay room protocol は変更しません。
  • cross-node public lobby と per-Origin quota は追加しません。

デプロイメモ

共有 relay の ALLOWED_ORIGINS に各 production site Origin を追加してください。同じ物理 relay は両方の管理画面で同じ 12文字 Node ID を使用する必要があります。Production page から接続する node URL は wss:// root origin とし、同一 origin の /health を HTTPS で提供してください。

## 概要 この PR は、Ranked Match を含めない通常 multiplayer のために、複数 relay node の選択と管理を追加します。同じ relay を複数サイトから共有でき、招待されたプレイヤーは room が作成された同一 node に接続されます。 ## 変更内容 - MongoDB に `multiplayer_servers` collection と node index を追加します。 - `/api/multiplayer/select` で、health、capacity、latency と stable client ID に基づく node selection を提供します。 - 12文字の共有 Node ID を含む `#p2=<node_id>:<invite>` 形式を追加します。 - `P2Connection` を asynchronous selector / WebSocket open に対応させ、opening 中の message queue と close cleanup を追加します。 - level 100 admin のために、node Add / Edit / Test / Enable / Disable / Remove UI を追加します。 - health request は DNS pinning、TLS hostname check、redirect refusal と private-address rejection を使用します。 - Redis health cache が利用できない場合は direct probe に fallback します。 - 管理用 POST だけに route-local CSRF protection を有効化します。 ## テスト - `python -m unittest discover -s tests -v` — 7 tests passed - Python compile check - 51 JavaScript files の `node --check` - 7 Jinja templates の parse check - level 100 admin UI で2 node の health test を確認 - Chrome の2つの独立 tab で selector、invite、session、songsel、gameload、gamestart、note、gameresults、gameend を確認 - relay health connections が `0 → 2 → 0` になることを確認 - Edge で title screen から song select と `main.ogg` load まで確認 ## スコープの外 - Ranked Match、Elo、reservation capacity は追加しません。 - relay room protocol は変更しません。 - cross-node public lobby と per-Origin quota は追加しません。 ## デプロイメモ 共有 relay の `ALLOWED_ORIGINS` に各 production site Origin を追加してください。同じ物理 relay は両方の管理画面で同じ 12文字 Node ID を使用する必要があります。Production page から接続する node URL は `wss://` root origin とし、同一 origin の `/health` を HTTPS で提供してください。
Superories closed this pull request 2026-08-15 13:27:36 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
yuuki/taiko-web!1
No description provided.