Skip to content

Rust — 服务端 API

服务端 API 负责绑定 transport、accept session、接收 submit 和控制消息,并发送 result、progress、流控反馈、object/cache event 和 close ack。

工作流

  1. 构造 NnrpServerConfig
  2. 使用 NnrpServer::bind_tcp 或 transport provider 绑定。
  3. 使用 NnrpServer::accept 接收 session。
  4. 使用 receive_submit 接收任务。
  5. 使用 send_resultsend_partial_resultsend_progress 发送输出。
  6. 使用 receive_runtime_control 接收运行时控制帧。
  7. 显式关闭 session。

NnrpServer::bind_tcp

参数类型必填取值范围说明
addrimpl tokio::net::ToSocketAddrsSocket address本地 TCP bind address。
configNnrpServerConfigtransport = TcpServer runtime 配置。
返回错误
Result<NnrpServer, RuntimeError>Bind、listener、transport 或配置错误。
rust
let config = NnrpServerConfig::default().with_transport(RuntimeTransportKind::Tcp);
let server = NnrpServer::bind_tcp("127.0.0.1:4433", config).await?;

Provider Bind

ProviderPackage常用方法说明
TcpProvidernnrp-transport-tcpbind(addr, config)TCP listener。
QuicProvidernnrp-transport-quicbind(endpoint_config, config)带证书和 ALPN 配置的 QUIC listener。
IpcProvidernnrp-transport-ipcbind(endpoint, config)Unix socket 或 Windows named pipe listener。
WebSocketProvidernnrp-transport-websocketbind(endpoint, config)原生 WebSocket binary listener。

NnrpServer::from_listener

参数类型必填取值范围说明
listenerL: FramedListener + 'static任意 framed listener自定义或 provider 创建的 listener。
configNnrpServerConfig必须匹配 listener kindRuntime 配置。
返回错误
Result<NnrpServer, RuntimeError>Listener kind 不匹配或配置无效。

NnrpServer::accept

参数类型必填取值范围说明
---接收一个 peer 并打开一个 runtime session。
返回错误
Result<NnrpServerSession, RuntimeError>Accept、session-open 拒绝或 transport 错误。

NnrpServerSession::receive_submit

参数类型必填取值范围说明
---读取下一个 submit frame。
返回错误
Result<NnrpSubmit, RuntimeError>Transport、解析、生命周期或 unexpected-message 错误。
rust
let submit = session.receive_submit().await?;

NnrpServerSession::send_result

参数类型必填取值范围说明
frame_idu32已提交 frame id关联 result。
metadataResultPushMetadata有效 result metadataResult status 与 timing metadata。
bodyVec<u8>可为空序列化 result body。
返回错误
Result<(), RuntimeError>生命周期、序列化或 transport 错误。
rust
session
    .send_result(submit.frame_id, ResultPushMetadata::default(), output)
    .await?;

Streaming Result Methods

方法参数返回说明
send_partial_resultframe id, metadata, bodyResult<(), RuntimeError>发送增量 result bytes。
send_progressmetadata, bodyResult<(), RuntimeError>发送进度或状态更新。
send_result_drop_reasonframe id, metadata, bodyResult<(), RuntimeError>发送结构化 drop reason。
send_result_drop_reason_with_diagnosticsframe id, metadata, diagnosticsResult<(), RuntimeError>发送带诊断上下文的 drop reason。

Runtime Control Methods

方法参数返回说明
receive_cancelResult<CancelMetadata, RuntimeError>接收 cancellation。
receive_runtime_controlResult<NnrpRuntimeControl, RuntimeError>接收带 metadata 和 body 的 Preview4 通用控制帧。
send_backpressuremetadataResult<(), RuntimeError>通知 client 降速。
receive_pressure_updateResult<PressureUpdateMetadata, RuntimeError>接收 client pressure state。
send_capabilitymetadataResult<(), RuntimeError>发送 cost/preference/limit 信息。
send_route_hintmetadataResult<(), RuntimeError>发送执行或路由 hint。

Object And Cache Methods

方法参数返回说明
send_object_declaremetadata, bodyResult<(), RuntimeError>声明 runtime object。
send_object_refmetadata, bodyResult<(), RuntimeError>引用已有 object。
send_object_releasemetadata, bodyResult<(), RuntimeError>释放 object reference。
send_object_deltametadata, bodyResult<(), RuntimeError>发送 object delta bytes。
send_cache_referencemetadata, bodyResult<(), RuntimeError>发送 cache hit/reference。
send_cache_missmetadata, bodyResult<(), RuntimeError>报告 cache miss。
send_cache_invalidatemetadata, bodyResult<(), RuntimeError>失效 cache entry。

Lifecycle Methods

方法参数返回说明
receive_closeResult<SessionCloseMetadata, RuntimeError>等待 client close。
ack_closeclose metadataResult<(), RuntimeError>确认 close。
closeResult<(), RuntimeError>关闭 server session。

NnrpServerConfig

字段类型默认值说明
transportRuntimeTransportKindTcpRuntime transport slot。
supported_profilesVec<u16>标准 token profile接受的 profiles。
supported_cache_objectsVec<CacheObjectKind>接受的 cache object kinds。
schema_registrySchemaRegistry标准 registry接受的 schemas。
max_in_flight_operationsu164In-flight operation 限制。
granted_operation_creditu162初始 operation credit。
lease_ttl_msu3230000Lease TTL。
resume_window_msu32120000Resume window。
application_policyArc<dyn NnrpServerPolicy>Allow-all应用层校验策略。

NnrpSubmit

字段类型说明
frame_idu32Submitted frame id。
metadataFrameSubmitMetadataSubmit metadata。
bodyVec<u8>Submit body bytes。

WARNING

receive_submit 是窄接口。如果 submit、cancel、progress 和 close 会交错出现,应建立 runtime packet dispatch loop,而不是假设单一 request/result 顺序。

NNRP Documentation