Skip to content

C# — Transport API

Transport API 分布在 Nnrp.CoreNnrp.Transport.TcpNnrp.Transport.QuicNnrp.NativeBridge。应用通常有两条路:

  1. 明确使用 TCP 时,直接用 NnrpTcpMessageTransport
  2. 需要 Rust-backed connection、session、submit/result、cancel 和 control path 时,使用 native bridge host surface 与 TCP/QUIC runtime package。

导入

csharp
using Nnrp.Core;
using Nnrp.Transport.Tcp;
using Nnrp.Transport.Quic;
using Nnrp.NativeBridge;

NnrpTcpMessageTransport.ConnectAsync

打开 TCP 连接并返回 framed NNRP transport。

参数类型必填取值 / 范围说明
hoststring非空 hostname 或 IP远端 host。
portint1..65535远端 TCP 端口。
cancellationTokenCancellationToken默认 default取消连接。
返回可能抛出
ValueTask<NnrpTcpMessageTransport>参数、连接或取消错误。
csharp
await using var transport = await NnrpTcpMessageTransport.ConnectAsync("127.0.0.1", 4433, ct);

INnrpMessageTransport.SendAsync

发送一条 framed message。

参数类型必填取值 / 范围说明
messageNnrpFramedMessage有效 framed message要写出的消息。
cancellationTokenCancellationToken任意 token取消写入。
返回可能抛出
ValueTasktransport、disposed 或取消错误。

INnrpMessageTransport.ReceiveAsync

接收一条 framed message。

参数类型必填取值 / 范围说明
cancellationTokenCancellationToken任意 token取消接收。
返回可能抛出
ValueTask<NnrpFramedMessage>transport、header 格式错误、disposed 或取消错误。

Native Runtime Transport Provider

Nnrp.Transport.TcpNnrp.Transport.Quic 分别暴露 provider 和 runtime helper,把 package 边界映射到 Rust native transport slot。它们与 Client 中的 native bridge host facade 配合使用。

类型用途
NnrpNativeTcpTransportProviderTCP native runtime provider identity。
NnrpNativeQuicTransportProviderQUIC native runtime provider identity。
NnrpNativeTcpRuntime打开 TCP-backed session、connection 和 server host。
NnrpNativeQuicRuntime打开 QUIC-backed session、connection 和 server host。
csharp
using var host = NnrpNativeTcpRuntime.OpenConnectionHost(
    new NnrpNativeTcpRuntimeConnectionHostOptions(connectionId: 1, connectionGeneration: 1));

核心 Transport 类型

INnrpMessageSender

方法参数返回说明
SendAsyncNnrpFramedMessage, CancellationTokenValueTask写出一条 framed message。

INnrpMessageReceiver

方法参数返回说明
ReceiveAsyncCancellationTokenValueTask<NnrpFramedMessage>读取一条 framed message。

INnrpMessageTransport

组合 INnrpMessageSenderINnrpMessageReceiver

INnrpTransportIdentity

属性类型说明
TransportIdTransportId当前 active NNRP transport binding。

常见坑

WARNING

  1. NnrpTcpMessageTransport 使用 NNRP header length 做 framing,不要再加一层 length prefix。
  2. 发送和接收各自有 gate,但请求顺序仍然由应用层负责。
  3. transport 要用 await usingDisposeAsync 释放。
  4. Rust-backed runtime path 使用 NnrpNativeTcpRuntimeNnrpNativeQuicRuntimeNnrpTcpMessageTransport 只适合底层 TCP framing 测试和诊断。 :::

NNRP Documentation