COBBLE MESH / ENGINEERING NOTES

让连接,
回到玩家之间。

Cobble Mesh 是圆石的可选联机层:本地身份、签名邀请、节点发现与游戏流桥接。基于 libp2p,把连接细节留给启动器。

架构说明 · 2026.10.25

目前的游戏入口采用显式中继。直连、AutoNAT 与 DCUtR 已有基础组件,仍在接入和验证。

01

目录负责相遇,中继承载连接。

目录与游戏流量走两条路径。节点目录提供引导信息;启动器使用已配置的种子,建立经过身份认证的长期连接。目录暂时为空,仍可通过已知种子加入网络。

左右滑动查看全图 ↔

节点目录与游戏流量拓扑节点目录discovery / bootstrap节点目录已知种子玩家 A · 启动器local identity + bridge玩家 B · 启动器local identity + bridge中继节点authenticated libp2p streams经中继建立的对端流后续选路:经验证的直连 / DCUtR
实线:当前游戏中继路径。棕色虚线:节点发现与引导。底部虚线:仍在接入验证的直连路径。节点目录不转发游戏数据。
02

名字方便识别,密钥负责证明。

身份在本地生成并保存。显示名称可以修改;完整 PeerId 与密钥关联,连接和签名验证以它为准。名称后的短后缀便于区分,不是全球唯一用户名。

左右滑动查看全图 ↔

密钥生成 PeerId,PeerId 生成短后缀,档案通过私钥签名本地 Ed25519 密钥private key stays localPeerId完整身份标识名称 # 短后缀SHA-256(PeerId bytes)[:6]SignedProfilename · revision · issued_at · expires_at签名cobble-mesh/user-profile/v1
短后缀使用 6 字节摘要,显示为 12 位十六进制。签名档案带有效期,验证时检查签名与时间。

签名证明“这段信息由控制该密钥的一方发出”,不证明真实姓名、唯一自然人或长期信誉。临时身份可以重新创建,因此身份本身不能阻止刷号。切换身份会改变当前会话使用的密钥,原身份与联系人仍可保留。

03

把一个本地地址,接到朋友的世界。

房主在 Minecraft 内开放局域网,确认端口后创建邀请。朋友接受邀请,启动器建立本地 TCP 入口;Minecraft 只需连接这个本地地址。桥接的目标限定在房主批准的游戏端口。

左右滑动查看全图 ↔

邀请验证后,经中继连接两端的本地游戏端口加入者的游戏Minecraft加入者启动器Mesh bridge房主启动器Mesh bridge局域网世界Minecraft验证邀请 · PeerId / proof / expiry经中继打开已认证的游戏流连接本地地址连接批准的端口Minecraft TCP 字节流
游戏数据路径:加入者 Minecraft → 本地桥接 → Mesh 中继流 → 房主桥接 → 已批准的局域网端口。

邀请是连接凭据

邀请带身份、用途与有效期。接收端验证证明,再建立对应的游戏连接。不要将邀请发布到不可信的位置。

路径来自实际证据

服务在线、预约中继成功和游戏流已建立是不同阶段。Inspector 记录连接标识、活动流与字节数,而不是仅凭一个直连事件判断游戏路径。

04

一个房主,一份共同的游戏现场。

当前多人小组以房主为中心,支持房主和两位加入者。每位加入者获得自己的本地桥接地址,连接同一个房主游戏。它是应用层游戏小组,不创建虚拟网卡或整段局域网。

左右滑动查看全图 ↔

两位加入者分别经中继连接房主,房主连接局域网世界朋友 Alocal TCP bridge朋友 Blocal TCP bridge独立中继流房主 · 小组host-owned session游戏世界approved LAN port
当前容量:3 人。会话有生命周期;房主结束小组会结束对应连接。此图描述游戏应用拓扑,不代表任意成员之间已有全互联链路。
05

复用成熟传输,把接口留在边界内。

Rust / Tokio 负责后台运行,libp2p 提供身份、连接和流管理。TCP 传输使用 Noise 认证与 Yamux 多路复用。协议名称区分身份观察、游戏流与小组流。

用途协议 / 域边界
Identify/cobblemesh/identify/1对端身份与连接信息
游戏流/cobblemesh/game-stream/0.1.0邀请约束下的游戏桥接
小组流/cobblemesh/group-stream/0.1.0/{peer}按对端区分的小组桥接
签名域cobble-mesh/user-profile/v1公开档案签名的域分隔

MeshNetworkSnapshot

原生服务推送状态快照,界面订阅 mesh-network-changed。检测结果和真实会话证据分别保存。

phase · generation · attempt · retry_at
services · checks · last_error
session_route · session_evidence
  peer_scope · selected_connection
  bytes_sent · bytes_received
  active_streams · completed_streams

插件集成沿用宿主权限边界:以游戏上下文、受限动作和资源句柄暴露真实需要的能力。通用 Mesh 插件 API 仍需随具体消费者完善;当前原生快照不等于已经发布的稳定 SDK。

06

每一个“在线”,都应该有依据。

开启在线模式后,后台自动连接,不阻塞首页。首轮最多尝试三次,每次 10 秒,重试间隔为 2 秒和 5 秒并加少量抖动。失败后逐步延长后台重试间隔;关闭 Mesh 会取消当前连接与重试。

左右滑动查看全图 ↔

离线模式开启后连接,成功在线,断开重连,失败继续后台恢复离线mode off连接中attempt 1 → 3在线authenticated重连中connection lost连接失败background backoff失败后继续后台恢复
关闭模式会使当前连接代次失效,迟到的事件不能把状态重新设为在线。在线只表示已有认证服务连接,具体游戏路径另行记录。
继续读代码,也欢迎一起把协议磨好。libp2p 协议文档 ↗