Message——缓冲消息
到目前为止,系统之间互通信息只有一条路:共享数据。射手把分数写进 Resource,记分牌再去读——第 5、6 章的所有协作都是这个模式。它对状态很自然:分数、库存、配置,本来就该常驻一个格子。但对事情就别扭了。“碰撞发生了”“敌人死了”“按钮被按下”——这些不是状态,是一次性的通知。硬塞进 Resource,你得自己操心一堆杂务:通知完谁负责清掉?没清干净会不会被处理两次?三个系统都想知道怎么办?
Message(消息)是 Bevy 为“通知”准备的专用通道:写者把消息投进缓冲,任意多个读者各自取走,过期由引擎清理。写者不知道读者是谁,读者也不知道写者是谁,双方唯一的共同知识是消息类型本身。第 6 章结尾说“碰撞与计分从此不必相识”,本章兑现这句话。
本章的舞台是一座碰碰车场。车手阿莱(稍后还有小柔和老高)负责制造碰撞;DJ、记分员、灯光师、维修工各自竖着耳朵听——每一位都是一个系统,每一次协作都经由消息,而他们从头到尾互不相识。先搭出最小的写读闭环;再看解耦的真正回报——一写多读;然后钻进缓冲内部,搞清一条消息能活多久、什么时候被清掉,这是消息系统唯一容易踩的坑;最后老板出场,用一条消息让整个程序自己打烊。