Croupier JS/TS SDK 集成指南
安装
bash
npm install croupier-js-sdk最小示例
typescript
import {
createClient,
FunctionDescriptor,
ClientConfig,
} from "croupier-js-sdk";
async function main() {
const config: ClientConfig = {
agentAddr: "127.0.0.1:19091",
serviceId: "my-service",
};
const client = createClient(config);
const descriptor: FunctionDescriptor = {
id: "game.action",
version: "1.0.0",
resource: "game",
capability: "action",
risk: "safe",
};
client.registerFunction(descriptor, async () =>
JSON.stringify({ status: "success" }),
);
await client.connect();
await client.serve();
}注册元数据
FunctionDescriptor 的 tags/summary/description/operationId/deprecated 是展示层字段:注册时会随 protobuf 编码上报,进入控制面的函数分组与页面生成。多语言 SDK 共享同一 function ID 空间时,agent 对跨 provider 的空值注册做合并保护(空值不覆盖他方已有 tags/summary),但每个 SDK 仍应在注册时填写完整元数据,不要依赖合并兜底。
实例元数据(provider 自描述)
ClientConfig.instanceMetadata 携带用户自定义多 KV 实例元数据(如 serverId、pod),随 ProviderConnectRequest.metadata 上报,用于控制台「SDK 版本分布」页展示实例信息与按元数据搜索:
typescript
const client = createClient({
agentAddr: "127.0.0.1:19091",
serviceId: "my-service",
instanceMetadata: { serverId: "s1", pod: "game-7c4d" },
});- 保留键
sdkLanguage/sdkVersion/sdkName/protocol_version/gameId/env由平台固定字段生成;用户元数据撞键时 agent 丢弃该键并在注册响应warnings中告警。 - 元数据仅用于观测(展示/搜索/诊断),不参与路由与负载均衡。
- wire 语义与存储设计结论见
docs/architecture/sdk-wire-protocol.md「实例元数据」。
连接生命周期
transport 内部维持单读者阻塞读循环,空闲连接上探针(pong)与调用响应不受并发读竞争影响。连接断开或出错时:
- 所有 pending 调用立即以
connection closed失败; isConnected()变为false,心跳失败后按重连配置自动重连。
业务侧无需自行轮询连接状态;把 call() 的 rejection 当作普通的可重试失败处理即可。
