跨玩家器官间信道现状

05/041 浏览
已实现的 4 条信道(星形拓扑,大脑为中心)
信道 方向 用途 Server 处理
ReportOrganResult 器官 → 大脑 器官玩家上报处理结果 RelayMessage 透传
SendBrainSignal 大脑 → 器官 大脑下发调控指令 RelayMessage 透传
SendOrganFeedback 器官 → 大脑 器官反馈执行情况 RelayMessage 透传
SendFoodGift 玩家 → 玩家 投喂食物 RelayMessage 透传
所有信道都是点对点,需要显式 TargetUserId。没有器官↔器官直连信道。
被动广播信道:shared body_state
body_state(uid=0 共享数据)提供的是只读全局视图——大脑一次 Get 拿到所有玩家器官快照,但它是单向的(器官写入 → 大脑读取),不支持双向通信。
器官↔器官直连:是否需要?
从当前游戏设计看,器官间的协作信息流是:
胃 → (消化结果) → 大脑 → (调控信号) → 小肠
大脑作为中枢转发是符合生物学隐喻的。器官之间不需要直接对话,因为:
大脑是决策中心——胃不需要直接告诉小肠"食物来了",大脑看到胃的结果后决定是否通知小肠
星形拓扑天然解耦——N 个器官只需 N 条信道(到大脑),而器官直连需要 N×(N-1)/2 条
shared body_state 已覆盖被动感知——任何器官想知道其他器官状态,大脑 Get 一次就有了
耦合度评估
当前 CrossPlayerChannel 的耦合度很低,设计干净:
CrossPlayerChannel.lua  — 纯 API 外观,无业务逻辑
        ↓ 调用
Client.lua              — 通用 SendRemoteEvent / OnMessage
        ↓ 网络
Server.lua              — 通用 RelayMessage(from, to, msgKey, payload)
CrossPlayerChannel 不依赖任何器官模块,只依赖 Client 和 Settings
Server 的 4 个 handler 全部是同一个 RelayMessage 模式的复制品
添加新信道只需:Settings 加常量 → Server 加一个 handler(复制粘贴 RelayMessage) → CrossPlayerChannel 加一对 Send/On 方法
结论
目前不需要器官↔器官直连信道。如果未来确实出现器官间需要直接通信的场景(比如胰腺直接通知肝脏调节血糖),现有的 RelayMessage 基础设施可以零耦合地扩展——加一组常量 + handler + API 即可,不影响已有信道。星形拓扑 + shared body_state 被动广播,已经覆盖了当前所有跨玩家交互需求。