3.5 啊哈实验:删掉连线
前面的内容都是"读"和"看"。这一节我们动手做一个实验——改一行 YAML,观察现象的变化。通过这个"啊哈"瞬间,你会真正理解"连线=数据在流动"。
学习目标
学完本节,你将能够:
- 通过修改
dataflow.yml改变数据流的行为 - 用"连线断了"的现象反向理解"连线"的本质
- 证明 DORA 数据流中"数据通过 YAML 定义的连线流动"
实验准备
- 确保之前的数据流已停止(
Ctrl+C终止)。 - 进入
aviation/目录。 - 打开
dataflow.yml:
当前内容:
实验:删掉连线
把 aviation 的 inputs 中的 cmd: controller/cmd 这一行删掉(或注释掉),改为:
保存文件。
观察现象
现在运行数据流:
两个窗口仍然会弹出,但这次:无论你怎么按控制器上的按钮,小飞机都一动不动。
终端中,你也看不到 aviation 节点收到 cmd 的日志了——它只会打印 Publishing pose: ...,但 pose 的值永远不变(飞机停在起点)。
按 Ctrl+C 停止。
恢复原状
把 dataflow.yml 改回来,取消注释:
保存后重新 dora run,小飞机复活了——又能动了!
"啊哈"时刻
这个实验告诉我们什么呢?
dataflow.yml中cmd: controller/cmd这一行,就是"连接 controller 和 aviation 的管道"。删掉它,管道就断了,数据不再流动,小飞机自然收不到指令。
实验中你没有改任何代码,只是改了一行 YAML。这就是 DORA 的核心思想:数据流的拓扑结构由配置定义,和代码分离。
看到没有?仅仅把一行文字注释掉,整个系统的行为就变了——这就是"配置即代码"的威力。controller 节点明明还在运行、还在发数据,但因为"管道"断了,接收方就永远收不到。就像两个人在打电话,电话线拔了,喊得再大声也听不见。
延伸思考
如果反过来,删掉 controller 的 tick: dora/timer/millis/16 这一行呢?
试试看会发生什么。(提示:controller 还在运行,但不再被"闹钟"叫醒,所以不会发送指令,小飞机也不动。)
动手练习
如果把 dataflow.yml 中的 controller 节点整个删掉(删掉 - id: controller 到 outputs: [cmd] 这 7 行),只保留 aviation 节点,然后 dora run,会怎样?
参考答案
aviation 节点会启动,弹出一个窗口,但控制器的窗口不会出现。由于没有控制器发送 cmd,小飞机停在原地不动。但 aviation 节点不会报错——它只是安静地等待永远不会到来的 cmd。
这说明了 DORA 的一个重要特性:节点之间是解耦的,一个节点不存在不会导致另一个节点崩溃——它只是收不到数据而已。
常见问题 FAQ
确认保存文件后再运行 dora run。如果改动后还在用之前启动的旧进程,请先 Ctrl+C 停止再重新启动。
确认删除了注释符号(#),确保 YAML 格式正确。YAML 对缩进很敏感,inputs: 和 cmd: 要对齐。
小结
- 注释掉
cmd: controller/cmd一行 → "连线断了",小飞机不动。 - 不改代码只改配置,就能改变数据流的行为——这是 DORA 数据流架构的核心特性。
- 反过来也成立:没有定时器,controller 不会触发;没有 controller,aviation 只会空等。
- 数据流不是靠代码硬编码,而是靠 YAML 配置定义。
做完这个实验,你已经理解了 DORA 数据流的核心机制。下一章我们将开始自己写节点——从 Python 开始,亲手创建你的第一个 DORA 节点!