mirror of
https://github.com/layue13/MoonBridge.git
synced 2026-10-26 19:03:49 +00:00
feat: 与 TCP 并存的 WebSocket 玩家监听
新增可选 websocket 配置段,在原有 TCP listen 之外再开一个 WebSocket 监听, 供经 CDN 接入的客户端使用;两种入口共用会话、选服、转服和 maxConnections。 - core.websocket:升级握手(可选 TLS)、二进制消息与 Minecraft 字节流互转、 可信代理真实 IP(X-Forwarded-For 从右取第一个不可信地址 / CF-Connecting-IP 等) - SessionChannels.clientAddress 统一玩家地址,用于两类准入事件、Mojang 验证 IP 与 Bungee 转发 - ConnectionGate 支持升级后才加入管线;登录等待守卫放在 WebSocket 适配器之后 - 未升级连接计入 maxConnections,并受 handshakeTimeoutSeconds 约束 - 测试:真实 socket 上 TCP 与 WebSocket 并存登录与转发、分片/合并/Ping、 在线模式加密与转发 IP、不可信来源、404/文本帧、名额归还、wss 证书加载 - 文档:docs/websocket.md,并更新运行配置、插件、架构与默认配置示例 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GGL9BudzWm4dUQgBsQw4Qr
This commit is contained in:
27 files changed
+1477
-29
No files matched your search
+1
-1
@@ -99,7 +99,7 @@ interface EventListener<E extends Event<R>, R> {
|
||||
|
||||
### 玩家准入
|
||||
|
||||
`ConnectionAdmissionEvent(InetSocketAddress remoteAddress)` 在 TCP 建连后、Minecraft 协议解析前触发,适用于来源地址策略,包括状态查询连接。地址是代理接受连接时看到的实际 TCP socket peer;若代理前有网络中继,地址就是该中继。拒绝或准入检查失败时直接关闭 TCP,因此客户端尚无 Login Disconnect 可显示。`PlayerAdmissionEvent(PlayerView player, InetSocketAddress remoteAddress, boolean authenticated)` 在身份建立后、初始选服和后端登录前触发。在线代理模式下,核心仍先执行 `ONLINE_BUNGEE` 会话验证;事件在验证成功后派发,`authenticated` 为 `true`。离线模式在生成客户端名字和离线 UUID 后派发,`authenticated` 为 `false`。因此该事件可供 Ban、白名单等准入策略使用,不能替代认证提供者或改变核心认证过程。拒绝会发送 Login Disconnect。
|
||||
`ConnectionAdmissionEvent(InetSocketAddress remoteAddress)` 在 TCP 建连后、Minecraft 协议解析前触发,适用于来源地址策略,包括状态查询连接。地址是代理接受连接时看到的实际 TCP socket peer;若代理前有网络中继,地址就是该中继。经 [WebSocket 监听](websocket.md)接入的连接在 HTTP 升级完成后才触发该事件,地址在对端属于 `websocket.trustedProxies` 时取自配置的真实 IP 头,否则仍是 socket peer;`PlayerAdmissionEvent`、Mojang 会话验证和 Bungee 转发使用同一地址。拒绝或准入检查失败时直接关闭 TCP,因此客户端尚无 Login Disconnect 可显示。`PlayerAdmissionEvent(PlayerView player, InetSocketAddress remoteAddress, boolean authenticated)` 在身份建立后、初始选服和后端登录前触发。在线代理模式下,核心仍先执行 `ONLINE_BUNGEE` 会话验证;事件在验证成功后派发,`authenticated` 为 `true`。离线模式在生成客户端名字和离线 UUID 后派发,`authenticated` 为 `false`。因此该事件可供 Ban、白名单等准入策略使用,不能替代认证提供者或改变核心认证过程。拒绝会发送 Login Disconnect。
|
||||
|
||||
多个准入监听器按注册顺序运行;允许策略运行全部监听器,首个拒绝即停止并拒绝玩家。空 stage、空结果、异常、超时或过载均失败关闭;内部错误不会把详细异常发送给客户端。准入请求使用有界队列,容量 128,最多 1024 个未决请求。`plugins.eventTimeoutSeconds` 默认 5 秒,范围 1–30 秒;每个准入事件的所有监听器共享同一个事件期限。准入事件只在接入和登录阶段触发,不进入 PLAY 包热路径。
|
||||
|
||||
|
||||
Reference in new issue
Block a user