Skip to main content
GLink 是一种通用的链路层传输。它为客户端提供统一的高层通道 API,同时由传输插件将该 API 适配到 Shared Memory / RPM 或其他物理链路。 GLink 是对等且对称的:任一端都可以打开通道、交换数据并参与协商。通道是一条独立的逻辑数据管道,多个通道可以共享一条物理传输。 核心负责通道状态、命令处理、缓冲区所有权以及客户端通知。传输插件将命令和数据编排为物理传输所需的线路格式。当远端未运行相同的 GLink 实现时,插件还可以对 GLink 命令进行翻译。

接收意图提供反压

在对端发送之前,接收端客户端会排队一个接收意图,标明其可接收的最大报文大小。远端 GLink 核心得知有一个合适的缓冲区存在,并在发送数据时选择匹配的意图。意图无需单独的信用协议即可提供反压。它们还允许基于拷贝的传输在物理传送开始之前保留空间或分配接收缓冲区。客户端可以排队多个意图,发送方使用第一个合适的意图。

通道生命周期

打开通道时指定传输、远端边(edge)和通道名称。只有在远端接受打开请求并且客户端收到已连接通知后,通道才可使用。 主要的状态通知包括:
  • Connected(已连接)—— 两端完成通道建立。
  • Local disconnected(本地断开)—— 本地客户端请求关闭且清理完成。
  • Remote disconnected(远端断开)—— 远端率先关闭了通道。
本地断开之后不会再有通道活动,回调资源可以释放。恢复通信需要再次打开通道。

协商与传输选择

当一条传输启动时,两端会协商兼容的协议版本和特性集。每一端从其支持的最高版本开始,交换版本命令和确认,并在对端支持较少时降级选择。所选版本的特性标志会被协商,通常是取双方支持特性的交集。 只有当两端的协商序列均完成之后,传输才被视为打开。GLink 还可以根据传输优先级和可选的客户端选择信息,为某条 edge 选择最合适的可用传输。

缓冲区所有权

所有权跟随异步操作进行流转:
  1. 接收端 GLink 拥有已排队的意图,直到其可用于一次传输。
  2. 发送端客户端提交数据。
  3. 接收端客户端处理缓冲区并发出完成信号。
  4. 发送端收到通知,可复用或释放其发送状态。
关闭和子系统重启路径必须通过 abort 回调归还接收意图和发送报文的私有数据。

后续步骤

  • Use Cases —— 打开通道、发送和接收数据、处理子系统重启
  • Debugging —— 诊断传输状态、通道状态和缓冲区所有权问题