传输层
统一库 dlt698::dlt698 的传输接口提供字节流通道。TCP 和原始串口依赖 standalone Asio,但只有传输模块用它——消费方不需要 Asio 头文件。
这一部分的页面
组成部分
core 与 transport 的区别
MemoryChannel 和 SerialLinkChannel 在 core 里,不依赖 Asio,用 DLT698_BUILD_TRANSPORT=OFF 也能用。只有 IoRuntime、TcpChannel、TcpListener、SerialChannel 需要传输构建。
没有隐藏线程
这是整个传输层最重要的设计约定:
IoRuntime不创建内部工作线程,由应用调用run()/run_for()驱动。ManualExecutor同样不创建线程,时间由advance()推进。SyncClientService不创建线程,只在调用线程上等待。IExecutor::post/schedule必须延后执行任务,不能在投递函数内直接调用用户任务。
因此"谁驱动运行时"始终是应用的责任。这也是为什么模拟(ManualExecutor + MemoryChannel)和生产(IoRuntime + TcpChannel)能共用同一套会话代码。