Skip to content

连接方式

NapCat SDK 支持四种 Transport,覆盖不同的网络拓扑场景。

Transport 对照

Transport方向适用场景
WebSocketTransport正向 WS:SDK → NapCatSDK 主动连接 NapCat 实例
ReverseWebSocketTransport反向 WS:NapCat → SDKNapCat 主动连接 SDK 服务
HttpTransportHTTP + 事件上报HTTP 调用 + NapCat 推送事件
SseTransportHTTP-SSEHTTP 调用 + SSE 事件推送

WebSocketTransport

正向 WebSocket:SDK 作为客户端主动连接 NapCat WebSocket 服务。

构造函数

ts
new WebSocketTransport(options: WebSocketTransportOptions)

配置选项

选项类型必填默认值说明
urlstringWebSocket 服务器地址,如 ws://127.0.0.1:3001
tokenstringNapCat access token,非空时附加到 URL 查询参数
timeoutnumber10000API 调用超时(ms)
reconnectReconnectOptions重连策略配置,不传则不自动重连

示例

ts
import { WebSocketTransport } from '@aemeath-projects/napcat'

const transport = new WebSocketTransport({
  url: 'ws://localhost:3001',
  token: 'your-access-token',
  timeout: 10000,
  reconnect: {
    initialDelay: 1000,
    maxDelay: 30000,
  },
})

ReverseWebSocketTransport

反向 WebSocket:SDK 启动 WebSocket Server,等待 NapCat 主动连接。

构造函数

ts
new ReverseWebSocketTransport(options: ReverseWebSocketTransportOptions)

配置选项

选项类型必填默认值说明
portnumber监听端口,0 表示由 OS 分配随机可用端口
hoststring'127.0.0.1'监听主机
pathstring'/'WebSocket 路径
tokenstringNapCat access token,非空时校验连接方提供的 token
maxConnectionsnumber1最大并发连接数
timeoutnumber10000API 调用超时(ms)

属性

属性类型说明
portnumber已绑定的实际端口(port=0 时由 OS 分配)
urlstring外部可连接的 WS URL(含 host、port、path)

示例

ts
import { ReverseWebSocketTransport } from '@aemeath-projects/napcat'

const transport = new ReverseWebSocketTransport({
  port: 8080,
  token: 'your-access-token',
})

console.log('等待 NapCat 连接:', transport.url)

HttpTransport

HTTP Transport:API 调用通过 HTTP POST 发送,事件接收通过内置 HTTP server。

构造函数

ts
new HttpTransport(options: HttpTransportOptions)

配置选项

HttpTransportOptions

选项类型必填默认值说明
apiBaseUrlstringNapCat HTTP API 基础地址,如 http://127.0.0.1:3000
tokenstringNapCat access token,非空时附加到请求头
eventServerHttpEventServerOptionsSDK 侧 event server 配置

HttpEventServerOptions

选项类型必填默认值说明
portnumber监听端口,0 表示由 OS 分配随机可用端口
hoststring'127.0.0.1'监听主机
pathstring'/onebot/event'事件上报路径

属性

属性类型说明
eventServerPortnumber已绑定的 event server 实际端口

示例

ts
import { HttpTransport } from '@aemeath-projects/napcat'

const transport = new HttpTransport({
  apiBaseUrl: 'http://localhost:3000',
  token: 'your-access-token',
  eventServer: {
    port: 8080,
    path: '/onebot/event',
  },
})
// 在 NapCat 配置中将事件上报地址设为 http://你的地址:8080/onebot/event

注意connect() 启动 event server 后会自动调用 get_login_info 做健康检查,失败则抛出 ConnectionError

SseTransport

SSE Transport:API 调用走 HTTP POST,事件接收走 GET /_events SSE 连接。

构造函数

ts
new SseTransport(options: SseTransportOptions)

配置选项

选项类型必填默认值说明
baseUrlstringNapCat SSE 基础地址,如 http://127.0.0.1:3000
tokenstringNapCat access token,非空时附加到 Authorization header
reconnectReconnectOptions断线重连配置,不传则不自动重连

示例

ts
import { SseTransport } from '@aemeath-projects/napcat'

const transport = new SseTransport({
  baseUrl: 'http://localhost:3000',
  token: 'your-access-token',
  reconnect: {
    initialDelay: 1000,
    maxDelay: 30000,
  },
})

重连机制

WebSocketTransportSseTransport 支持可选的自动重连,通过 reconnect 配置。

ReconnectOptions

选项类型必填默认值说明
initialDelaynumber1000初始延迟(ms)
maxDelaynumber30000最大延迟(ms)
multipliernumber2退避倍数
jitternumber0.1抖动因子 0~1,添加随机性避免惊群
maxRetriesnumber-1最大重试次数,-1 为无限

指数退避算法

delay = min(initialDelay * multiplier^attempts, maxDelay)
delay += random(-jitter, +jitter) * delay  // 添加抖动
  • 连接成功后调用 reset() 重置计数器
  • maxRetries = -1 时无限重试
  • 主动调用 disconnect() 不会触发重连
  • 每次重连前会 emit reconnecting(attempt, delay) 事件

重连示例

ts
import { WebSocketTransport } from '@aemeath-projects/napcat'

const transport = new WebSocketTransport({
  url: 'ws://localhost:3001',
  reconnect: {
    initialDelay: 500,    // 首次重连等待 500ms
    maxDelay: 10000,       // 最长等待 10s
    multiplier: 2,         // 每次翻倍
    jitter: 0.2,           // ±20% 抖动
    maxRetries: 10,        // 最多重试 10 次
  },
})

transport.on('reconnecting', (attempt, delay) => {
  console.log(`第 ${attempt} 次重连,${delay}ms 后`)
})

以 MIT 协议开源