Skip to content

Rust API 概览

这一页是地图。具体方法表放在 client、server、core、FFI 和 WASM 分页里,方便使用者从自己要实现的工作流进入,而不是先读一整坨符号清单。

Release

项目
NNRP 协议线NNRP/1 Preview4
Rust package version1.0.0-preview.4.17
最低 Rust 版本1.82
GitHub release asset tagv1.0.0-preview.4.17

API 区域

区域Package拥有内容页面
核心协议模型nnrp-coreWire codec、metadata、profiles、runtime-control、object/cache、校验核心类型
客户端 runtimennrp-runtimeconnect、open session、submit、receive events、control requests、close客户端 API
服务端 runtimennrp-runtimebind、accept、receive submit/control、send result/progress/object/cache events服务端 API
Transport providersnnrp-transport-providernnrp-transport-*Registry、probe policy、TCP/QUIC/IPC/WebSocket 真实传输实现Transport Provider 边界
原生 ABInnrp-ffiC ABI、handle/event model、native artifact manifestFFI / 原生接口
浏览器 primitivesnnrp-wasmWASM protocol helpers、browser binary-frame helpers、.d.ts 输出WASM

Cargo

toml
[dependencies]
nnrp-core = "1.0.0-preview.4.17"
nnrp-runtime = "1.0.0-preview.4.17"
nnrp-transport-provider = "1.0.0-preview.4.17"
nnrp-transport-tcp = "1.0.0-preview.4.17"
nnrp-transport-quic = "1.0.0-preview.4.17"
nnrp-transport-ipc = "1.0.0-preview.4.17"
nnrp-transport-websocket = "1.0.0-preview.4.17"

# 可选下游表面
nnrp-ffi = "1.0.0-preview.4.17"
nnrp-wasm = "1.0.0-preview.4.17"
nnrp-conformance = "1.0.0-preview.4.17"

Transport Provider 边界

Runtime 只通过 framed transport traits 看 transport。Rust SDK 里的 transport 沿用 NNRP 的定义:它是 NNRP wire protocol 下方的帧承载边界,不是在声明 OSI 网络分层。具体 carrier 行为归 provider 包所有。

Package拥有内容Native / WASM artifact 边界
nnrp-transport-tcpTCP connect/bind 与 TCP probe identityNative FFI transport artifact 以 TCP 为粒度发布
nnrp-transport-quicQuinn/Rustls QUIC connect/bind 与 QUIC probe identityNative FFI transport artifact 以 QUIC 为粒度发布
nnrp-transport-ipc本地 IPC endpoint:Unix domain socket 与 Windows named pipeNative FFI transport artifact 以 IPC 为粒度发布
nnrp-transport-websocket原生 Rust WebSocket binary-frame carrierNative FFI transport artifact 以 WebSocket 为粒度发布
nnrp-wasm浏览器 WASM primitives 与 browser binary-frame helpers浏览器 artifact 是 nnrp-wasm-browser-1.0.0-preview.4.17.zip

client/server runtime 这种角色包不隐藏 carrier 实现。需要哪个 transport,就安装拥有该行为的 transport 包;多个 carrier 同时可用时,再交给 provider policy 选择。

宿主角色边界

Rust 与其他 SDK 使用相同的宿主基数。NnrpClient::connect 接收一个应用 endpoint、 ClientProviderRoutes 和显式编译进来的 provider set;它可以评估多条 route,但最终只接管一条 carrier。 NnrpServer::listen 接收 ServerProviderRoutes,并原子持有全部 eligible listener 组成的集合;每个已接受 session 仍只接管一条 carrier。低层 provider connect/listenfrom_transportfrom_listener 与 native FFI handle 保持单数,但不得替代生产宿主 API。

精确 route/security 类型见客户端 API服务端 API;共享规则冻结在 传输策略与探测

Runtime Control 与 Object/Cache Frame

Preview4 增加了紧凑控制面事件,用于 scheduling、cancel、progress、partial result、backpressure、 capability negotiation、route hint、cache reference 和 trace context。Wire 定义见 运行时控制 Profiles。Rust 侧通过 client event、server send/receive helper 和 core metadata 类型暴露这些能力。 send_trace_context(frame_id, metadata, body) 使用 frame_id=0 表示 session scope,或使用 active operation 记录的 submit frame ID 表示 operation scope。传入无关的非零 frame ID 属于无效调用。

Artifact 命名

Artifact family示例
Native transport FFInnrp-ffi-transport-tcp-native-linux-x86_64-1.0.0-preview.4.17.zip
Native QUIC FFInnrp-ffi-transport-quic-native-windows-x86_64-1.0.0-preview.4.17.zip
Browser WASMnnrp-wasm-browser-1.0.0-preview.4.17.zip
ChecksumsSHA256SUMS

下游 SDK 加载 native library 或 WASM 文件前,应先校验 artifact manifest。

Transport Provider 公共 API

Rust SDK 是冻结选路契约的一等实现,不只是其他语言的产物后端。nnrp-transport-provider 精确公开以下类型:

类型冻结字段
ProviderCostmodel_id: u16units: u64
ProviderLimitsmax_frame_bytes: u64
ProviderLimitationRequiresUdpRequiresTcpLocalHostOnlyNativeHostOnlyBrowserHostOnlyUnixDomainSocketWindowsNamedPipe
TransportProviderMetadataidcostpreference_ranklimitslimitations
TransportProviderDescriptornameversiontransport_idkindavailable、可选 library_pathmetadata、可选 diagnostic
TransportCandidateReadinesstransport_idprovider_idroute_resolvedsecurity_satisfied、可选 diagnostic
ProbeMetricssample_countsuccess_countmedian_throughput_bytes_per_secmedian_rtt_us
ProbeSampletransport_idprovider_idelapsed_us、可选 rtt_usbytes_sentbytes_receivedtimed_outfailed
TransportProbeObservationtransport_idprovider_idstate、可选 metrics、可选 diagnostic;state 只能是 SucceededFailed
ProbeStateNotRunSucceededFailedMissing
TransportCandidateDiagnostictransport_idproviderlocal_availablepeer_supportedwithin_limitsprobe_state、可选 probe、可选 selection_rank、可选 rejection_reason、可选 diagnostic
TransportRejectionReasonPolicyDisallowedLocalUnavailablePeerUnsupportedLimitExceededRouteUnresolvedSecurityUnsatisfiedProbeMissingProbeFailed
TransportSelection选中的 descriptor 与有序 candidates;rank 0 为最终选择
TransportSelectionErrorInvalidEvidence { diagnostic }ForcedTransportUnavailable { transport_id, candidates }NoViableTransport { candidates }
TransportProviderRegistryErrortransport ID 重复或 provider ID 重复;先注册的 provider 保持不变

TransportProviderDescriptor.name 是 provider 自有的 package 名或展示名。Registry lookup、readiness、 selection、route lookup 与 reporting 使用 transport_id,不得从 name 推导 carrier 身份。

选择入口冻结为:

rust
pub fn select_transport(
    providers: &[TransportProviderDescriptor],
    options: &TransportSelectionOptions,
) -> Result<TransportSelection, TransportSelectionError>;

pub fn select_transport_with_probe(
    providers: &[TransportProviderDescriptor],
    options: &TransportSelectionOptions,
) -> Result<TransportSelection, TransportSelectionError>;

pub fn summarize_provider_probe(
    provider: &TransportProviderDescriptor,
    samples: &[ProbeSample],
) -> Option<ProbeMetrics>;

TransportProviderRegistry::register 必须拒绝重复 transport ID 和 provider ID。 TransportProviderRegistry::selectselect_with_probe 分别接收和对应自由函数相同的 &TransportSelectionOptions,并遵守相同的冻结 evidence 规则。多个可用 provider 没有匹配 observation 时统一报告 ProbeMissing,不得通过 实现私有的捷径排序。 peer_supported_transports 按集合解释;requested_max_frame_bytes = Some(0) 是合法请求值,不代表未提供限制。

Readiness、observation 与原始 sample 都按 (transport_id, provider_id) 匹配。ProbeSample 继续作为 summarize_provider_probe 的原始输入;selection 消费经过校验的聚合 observation,因此 provider probe 失败 不会与从未提供 observation 混淆。TransportSelectionError.candidates 使用与成功 选择相同的有序诊断模型,因此错误不得丢弃 provider 证据。

两种选择函数都必须使用传输策略与探测冻结的 comparator。公开 API 暴露结构化 metrics 与有序诊断;ProbeScoreProbeCandidateScoreProbeSelection 以及任何不透明加权 score 均不属于 Preview4 API。

NNRP Documentation