JavaScript/TypeScript 快速使用
安装包
SDK 使用 Deno 作为开发工具链,但发布物是标准 npm ESM 包,并带 .d.ts 声明,保持 Node.js 兼容。
Deno 后端 client,安装全部 Preview4 native carrier:
bash
deno add npm:@nnrp/native-client npm:@nnrp/transport-tcp npm:@nnrp/transport-quic npm:@nnrp/transport-ipc npm:@nnrp/transport-websocketNode.js 后端 client:
bash
npm install @nnrp/native-client @nnrp/transport-tcp @nnrp/transport-quic @nnrp/transport-ipc @nnrp/transport-websocketDeno 后端 server:
bash
deno add npm:@nnrp/native-server npm:@nnrp/transport-tcp npm:@nnrp/transport-quic npm:@nnrp/transport-ipc npm:@nnrp/transport-websocketNode.js 后端 server:
bash
npm install @nnrp/native-server @nnrp/transport-tcp @nnrp/transport-quic @nnrp/transport-ipc @nnrp/transport-websocket默认浏览器 WebSocket 路径:
bash
npm install @nnrp/browser-client @nnrp/transport-websocketBackend Native Client
Node.js/Deno CLI、agent runtime、后端服务和 adapter 进程使用 @nnrp/native-client。安装一个或多个 transport 包;runtime 会探测已安装 provider 并根据策略选择 active transport。
ts
import { openNativeClient } from "@nnrp/native-client";
import { createTcpTransportProvider } from "@nnrp/transport-tcp";
import { createQuicTransportProvider } from "@nnrp/transport-quic";
const client = await openNativeClient({
endpoint: "nnrps://runtime.example/session/default",
transportPolicy: "auto",
transports: [
createQuicTransportProvider(),
createTcpTransportProvider(),
],
});
const session = client.openSession({ inputProfile: "tensor" });
const result = await session.submit({
frameId: 1,
payload: new Uint8Array([1, 2, 3]),
inputProfile: "tensor",
submitMode: "inline",
});
await session.close();
await client.close();Backend Native Server
应用需要暴露 NNRP endpoint 时使用 @nnrp/native-server。
ts
import { openBackendRuntime } from "@nnrp/native-server";
import { createTcpTransportProvider } from "@nnrp/transport-tcp";
const runtime = await openBackendRuntime({
transportPolicy: "force-tcp",
transports: [createTcpTransportProvider()],
});
const server = runtime.listen({ endpoint: "nnrp://0.0.0.0:4433" });
// 在 server adapter 中 accept 并处理 session。
await server.close();
await runtime.close();Browser Client
浏览器与 edge client 使用 @nnrp/browser-client。Browser client 使用 WebSocket Provider 与 browser role package 携带的 WASM runtime。
ts
import { openBrowserRuntime } from "@nnrp/browser-client";
import { createWebSocketTransportProvider } from "@nnrp/transport-websocket";
const runtime = await openBrowserRuntime({
transportProviders: [createWebSocketTransportProvider()],
});
const client = runtime.connect({
endpoint: "nnrps://example.test/session/default",
providerEndpoint: "wss://example.test/nnrp",
transportPolicy: "auto",
});
const session = client.openSession({ inputProfile: "token" });包边界清单
@nnrp/native-client与@nnrp/native-server是 role package,不捆绑.dll、.so、.dylib或 browser WASM artifact。- TCP、QUIC、IPC 与 WebSocket transport package 分别携带自己的 native Provider 产物。
@nnrp/browser-client携带 browser WASM;browser@nnrp/transport-websocket将其与宿主 WebSocket 对象组合使用,不复制该 WASM。- 安装哪个 transport 就允许哪个 transport 参与探测;同时安装多个时由 runtime probing 与 policy 选择 active path。