Skip to content

Rust — 客户端 API

客户端 API 负责启动 transport、打开 runtime session、提交任务、接收事件,并发送控制面更新。核心 metadata 类型见 核心类型

Dependencies

toml
[dependencies]
nnrp-core = "1.0.0-preview.4.0"
nnrp-runtime = "1.0.0-preview.4.0"
nnrp-transport-tcp = "1.0.0-preview.4.0"
nnrp-transport-quic = "1.0.0-preview.4.0"
nnrp-transport-ipc = "1.0.0-preview.4.0"
nnrp-transport-websocket = "1.0.0-preview.4.0"
tokio = { version = "1", features = ["macros", "rt-multi-thread", "net", "io-util"] }

工作流

  1. 构造 NnrpClientConfig
  2. 使用 NnrpClient::connect_tcp 或 transport provider 建立连接。
  3. 使用 NnrpClient::open_session 打开 session。
  4. 使用 NnrpClientSession::submit 提交任务。
  5. 使用 await_event 接收输出和控制事件。
  6. 使用 close 关闭 session。

NnrpClient::connect_tcp

参数类型必填取值范围说明
addrimpl tokio::net::ToSocketAddrsSocket address目标 TCP endpoint。
configNnrpClientConfigtransport = TcpClient runtime 配置。
返回错误
Result<NnrpClient, RuntimeError>DNS、connect、transport 或配置错误。
rust
let config = NnrpClientConfig::default().with_transport(RuntimeTransportKind::Tcp);
let client = NnrpClient::connect_tcp("127.0.0.1:4433", config).await?;

Provider Connect

非 TCP transport 或 provider 选择场景使用 provider crate。

ProviderPackage常用方法说明
TcpProvidernnrp-transport-tcpconnect(addr, config)TCP framed transport。
QuicProvidernnrp-transport-quicconnect(endpoint, endpoint_config, config)QUIC framed transport。
IpcProvidernnrp-transport-ipcconnect(endpoint, config)Unix socket 或 Windows named pipe。
WebSocketProvidernnrp-transport-websocketconnect(endpoint, config)原生 WebSocket binary transport。
rust
let config = NnrpClientConfig::default().with_transport(RuntimeTransportKind::Ipc);
let client = IpcProvider::connect("unix:///tmp/nnrp.sock".parse()?, config).await?;

NnrpClient::from_transport

参数类型必填取值范围说明
transportT: FramedTransport + 'static任意 framed transport自定义或 provider 创建的 transport。
configNnrpClientConfig必须匹配 transport kindRuntime 配置。
返回错误
Result<NnrpClient, RuntimeError>Transport kind 不匹配或配置无效。

NnrpClient::open_session

参数类型必填取值范围说明
---使用已连接 client 的配置。
返回错误
Result<NnrpClientSession, RuntimeError>Session open 拒绝或 transport 错误。
rust
let mut session = client.open_session().await?;

NnrpClientSession::submit

参数类型必填取值范围说明
metadataFrameSubmitMetadata有效 submit metadataProfile、schema、priority 与 timing context。
bodyVec<u8>可为空序列化后的请求 body。
返回错误
Result<u32, RuntimeError>序列化、流控、生命周期或 transport 错误。
rust
let frame_id = session
    .submit(FrameSubmitMetadata::default(), request_bytes)
    .await?;

NnrpClientSession::submit_nowait

参数类型必填取值范围说明
metadataFrameSubmitMetadata有效 submit metadataOperation metadata。
bodyVec<u8>可为空序列化后的请求 body。
返回错误
Result<u32, RuntimeError>写入 frame 后返回;结果后续从 event 接收。

NnrpClientSession::await_event

Preview4 应用优先使用这个方法。它能接收普通 result,也能接收 runtime-control、object/cache 和调度事件。

参数类型必填取值范围说明
---读取下一个 runtime packet。
返回错误
Result<NnrpClientEvent, RuntimeError>Transport、解析、生命周期或 unexpected-message 错误。
rust
match session.await_event().await? {
    NnrpClientEvent::Result(result) => handle_result(result),
    NnrpClientEvent::PartialResult { metadata, body } => handle_partial(metadata, body),
    NnrpClientEvent::Progress { metadata, body } => update_progress(metadata, body),
    NnrpClientEvent::Backpressure(metadata) => slow_down(metadata),
    NnrpClientEvent::ResultDropReason { metadata, body } => record_drop(metadata, body),
    _ => {}
}

NnrpClientSession::await_result

参数类型必填取值范围说明
---读取直到下一个 result packet。
返回错误
Result<NnrpResult, RuntimeError>如果非 result event 合法,应改用 await_event

Runtime Control Methods

方法参数返回说明
cancel_operationoperation_id, reason_codeResult<(), RuntimeError>请求取消操作。
abort_operationoperation_id, reason_codeResult<(), RuntimeError>请求中止操作,语义比 cancel 更强。
update_prioritypriority metadataResult<(), RuntimeError>更新调度优先级。
update_deadlinedeadline metadataResult<(), RuntimeError>更新任务 deadline。
expire_atexpiration metadataResult<(), RuntimeError>标记任务在指定时间后失效。
send_flow_updateflow metadataResult<(), RuntimeError>发送 flow/backpressure 状态。
send_credit_updatecredit metadataResult<(), RuntimeError>发送可用 credit。
send_control_requestmessage type, metadataResult<(), RuntimeError>通用紧凑控制帧。
send_control_request_with_diagnosticsmessage type, metadata, diagnosticsResult<(), RuntimeError>带 trace/diagnostic body 的通用控制帧。

这些帧的 wire 定义见 运行时控制 Profiles

Session Lifecycle Methods

方法参数返回说明
patch_sessionsession patch metadataResult<SessionPatchAckMetadata, RuntimeError>更新 session 参数。
migrate_transportmigration metadataResult<SessionMigrateAckMetadata, RuntimeError>请求 transport migration。
closeResult<(), RuntimeError>正常关闭 session。
close_transportResult<(), RuntimeError>异常路径关闭 transport。

NnrpClientConfig

字段类型默认值说明
transportRuntimeTransportKindTcpRuntime transport slot。
requested_session_idu320请求的 session id。
profile_idu16标准 token profile请求 profile。
schema_id / schema_versionu32标准 registry 值Schema identity。
priority_classSessionPriorityClassBalanced调度优先级。
default_deadline_msu32500默认 operation deadline。
max_in_flight_operationsu164本地 in-flight 限制。
lease_ttl_hint_msu3230000Lease TTL hint。
allow_resumeboolfalse启用恢复语义。
cache_hintsVec<CacheObjectKind>Client 预计使用的 cache object kinds。

NnrpClientEvent

Variant数据说明
ResultNnrpResult最终 result bytes。
PartialResultmetadata, body增量输出。
Progressmetadata, body进度更新。
ResultDropframe id没有 detail body 的 result drop。
ResultDropReasonmetadata, body结构化 drop reason。
FlowUpdate / Backpressure / CreditUpdatecontrol metadata流控和调度反馈。
ObjectDeclare / ObjectRef / ObjectRelease / ObjectDeltaobject metadataRuntime object 生命周期事件。
CacheReference / CacheMiss / CacheInvalidatecache metadataCache 协调事件。
Capability / RouteHintcontrol metadata能力协商和路由提示。

NnrpResult

字段类型说明
frame_idu32Result frame id。
metadataResultPushMetadataResult metadata。
bodyVec<u8>Result body bytes。

WARNING

Preview4 应用优先使用 await_eventawait_result 只适合最简单的 echo-style flow,无法表达 progress、backpressure、cache/object event 或详细 result drop。

NNRP Documentation