Skip to content

传输 Provider ​

NACT 本身不包含任何物理传输实现,所有物理连接都由传输 Provider 接入。

概念 ​

名称含义
ProviderAdaptor所有 Provider 符合的基础规范接口
ServerProviderrole: 'server',通过 listen() 提供入口并接受连接
ClientProviderrole: 'client',通过 dial() 主动发起连接
附着器通过附着到一个已有的服务器上完成路由NACT监听
服务器通过新建Server监听指定端口或路径完成NACT监听
客户端与NACT服务(无论是服务器还是附着器)完成通讯

TIP

需要注意的是这里的Server和Client只区分了谁主动发起连接,当NACT链接建立后,通讯是全双工的,不再做C/S区分。

官方 Provider ​

包角色接入方式可用运行时
@nyirusu/nact-websocket-serverServer服务器 / 附着器Node.js、Vercel、etc.
@nyirusu/nact-websocket-clientClient客户端Web、Node.js、Worker
@nyirusu/nact-streamable-http-serverServer服务器 / 附着器Node.js
@nyirusu/nact-streamable-http-clientClient客户端Web、Node.js、Worker、etc.
@nyirusu/nact-tcp-serverServer服务器Node.js
@nyirusu/nact-tcp-clientClient客户端Node.js、Cloudflare Workers
@nyirusu/nact-unix-serverServer服务器Node.js/POSIX
@nyirusu/nact-unix-clientClient客户端Node.js/POSIX
@nyirusu/nact-websocket-cloudflare-worker-serverServer附着器Cloudflare Workers
@nyirusu/nact-websocket-nuxtjs-serverServer附着器Nuxt / Nitro WebSocket 路由

TIP

Server Provider 分为自主监听(服务器)和附着器两种接入方式。

附着式由宿主接收请求并交给 Provider,仍属于接受连接的 Server 角色。

其他宿主接入可以参考自定义Provider章节。

只要协议相同,即可完成通讯。例如,websocket-nuxtjs-server与websocket-client两者通讯是合法的。

INFO

WebSocket 与 Streamable HTTP Server 可使用 provider.noServer: true 开启附着模式。

启动后,WebSocket 通过 attach(server, { path }) 接入宿主 Node HTTP Server。

Streamable HTTP 则需要宿主路由调用 fetch(request) 或 toNodeHandler 转换Node标准Req/Res HTTP模型。

使用官方 Provider ​

Server Provider ​

bash
npm install @nyirusu/nasdk @nyirusu/nact-websocket-server
ts
import NApp from '@nyirusu/nasdk'
import WebSocketServerProvider, {
  type WebSocketServerTransportSpec,
} from '@nyirusu/nact-websocket-server'

const server: WebSocketServerTransportSpec = {
  type: 'websocket',
  provider: { host: '127.0.0.1', port: 18900, path: '/nacp' },
}

const app = new NApp({ id: 'server', server: [server] })

app.nact.use(new WebSocketServerProvider())
await app.start()

Client Provider ​

bash
npm install @nyirusu/nasdk @nyirusu/nact-websocket-client
ts
import NApp from '@nyirusu/nasdk'
import WebSocketClientProvider, {
  type WebSocketClientTransportSpec,
} from '@nyirusu/nact-websocket-client'

const app = new NApp({ id: 'client' })

app.nact.use(new WebSocketClientProvider())
await app.start()

const target: WebSocketClientTransportSpec = {
  type: 'websocket',
  provider: { url: 'wss://example.com/nacp' },
}
await app.connect('server', target)

TIP

同一个 NApp 可以同时监听和主动连接,分别注册两个包即可:

ts
app.nact.use(new WebSocketServerProvider())
app.nact.use(new WebSocketClientProvider())

没有注册对应传输时,start() 或 connect() 会抛出 provider-not-found。

Released under the MIT License.