Skip to content

NACT 生命周期 ​

NACT 生命周期分为监听入口生命周期与Peer 生命周期。

监听入口由 Server Provider 创建并接收新连接,Peer 持有 Provider 交付的双向 Channel。NACT 不维护 App ID,也没有 NACP 的重连宽限状态。

监听入口生命周期 ​

listen(spec) 根据 role=server + spec.type 查找 Provider。Provider 启用服务端入口(官方 Provider 会自建监听服务;自定义 Provider 也可以只提供入口,由宿主交付连接),并返回对应的 ServerHandle:

ts
interface ServerHandle {
  close(): Promise<void>
}

每个入口相互独立,调用 ServerHandle.close() 只关闭对应入口,已建立的 Peer 由 NACT 继续持有,不随入口关闭。

传输接入与 TransportSpec 见传输 Provider。

Peer 生命周期 ​

建立 ​

Client Provider 的 dial() 成功,或 Server Provider 通过 listen() 的 accept 交付一条连接后,NACT 从相同的 Channel 创建 Peer,分配 peerId 并写入 peerTable,随后宣告 nact:peer:connect 事件。

dial() 返回时 Peer 已经入表,可以立即用于 sendToPeer()。

TIP

此时只能代表物理连接建立,NACP Register 尚未完成。

关闭 ​

Peer 可能因以下原因离开:

  • 本端调用 closePeer(peerId)。
  • 对端主动断开。
  • Framing 或 CBOR 解码失败后被 NACT 关闭。
  • NApp 终止。

除关闭物理连接外,Peer 还会统一执行peerTable.delete(peerId),并宣告nact:peer:disconnect。

与 NACP 的衔接 ​

NACT 的 Peer 断开后不会等待重连,也不会保留物理连接状态。

NACP 会监听 nact:peer:disconnect事件,再将该 Peer 对应的 App 标记为 offline:

NApp重连宽限、消息回退和补发由 NACP 生命周期 管理,NACT并不负责这些语义。

NACT 终止 ​

nact.terminate() 会:

  1. 关闭全部 Peer。
  2. 清空 peerTable。
  3. 关闭全部监听入口。

终止时连接表会先被清空,随后到达的底层 close 不再产生逐个 nact:peer:disconnect。

完整的 NApp 停机流程由 NApp 生命周期 负责,生命周期事件见可观测。

Released under the MIT License.