【免费下载链接】client-sdk-js
LiveKit browser client SDK (javascript)
LiveKit client SDK(npm 包名livekit-client)的 RPC 功能,让房间内的浏览器参与者之间可以直接发起请求-响应式远程调用:一方调用performRpc发起请求,另一方通过registerRpcMethod注册的处理函数响应返回,无需自建信令服务器。本文带你快速上手 livekit-client RPC 实战,并演示如何用它把 LLM 的 function call 轻松转发到客户端执行。
为什么需要参与者间 RPC?
传统实时应用里,参与者之间传消息多为"只发不回"的广播。而很多场景需要一问一答:
- 🤖 把 LLM 的 function call 转发给某个客户端执行,并取回结果
- 🔍 向指定参与者查询状态、设备信息
- 🎮 多人互动中发起"投票、点赞"等带响应的操作
livekit-client 内置的 RPC 基于房间可靠数据通道实现,天然支持点对点、超时控制与错误回传,且与 LiveKit Agents 深度配合,非常适合"AI 智能体 ↔ 浏览器端"的双向调用。
核心关键词速记:livekit-client RPC、performRpc、registerRpcMethod、请求-响应式远程调用、LLM function call 转发
快速上手:两步完成一次 RPC 调用
整个流程只有两个 API:接收方注册方法,发起方调用方法。
第一步:接收方注册 RPC 方法
在实现方法的参与者端调用room.registerRpcMethod(method, handler),handler 是一个异步函数,接收RpcInvocationData(含requestId、callerIdentity、payload、responseTimeout),返回的字符串就是对方的响应:
room.localParticipant?.registerRpcMethod( 'greet', // 方法名,任意字符串 async (data: RpcInvocationData) => { console.log(`收到来自 ${data.callerIdentity} 的调用:${data.payload}`); return `Hello, ${data.callerIdentity}!`; }, );⚠️ 注意:handler 收到的responseTimeout告诉你最多还有多少毫秒可响应;超时未返回,调用方会收到超时错误。
第二步:发起方调用 performRpc
调用方通过room.localParticipant.performRpc()发起请求,参数包含目标参与者identity、方法名和 payload:
try { const response = await room.localParticipant!.performRpc({ destinationIdentity: 'recipient-identity', method: 'greet', payload: 'Hello from RPC!', }); console.log('RPC 响应:', response); } catch (error) { console.error('RPC 调用失败:', error); }官方文档对这两步的完整说明见 README.md。
超时控制与内置错误码速查
performRpc的responseTimeout参数默认15000ms,若设置小于 8000ms 会被自动提升到 8000ms(为往返延迟留出缓冲)。相关定义见 utils.ts。
RPC 在实时环境下可能因各种原因失败,SDK 提供了结构化的RpcError,常见内置错误码如下:
| 错误码 | 名称 | 含义 |
|---|---|---|
| 1400 | UNSUPPORTED_METHOD | 对端未注册该方法 |
| 1401 | RECIPIENT_NOT_FOUND | 找不到目标参与者 |
| 1402 | REQUEST_PAYLOAD_TOO_LARGE | 请求负载过大(旧版协议 15KB 上限) |
| 1500 | APPLICATION_ERROR | 处理函数抛出非 RpcError 异常 |
| 1501 | CONNECTION_TIMEOUT | 连接确认超时 |
| 1502 | RESPONSE_TIMEOUT | 等待响应超时 |
| 1503 | RECIPIENT_DISCONNECTED | 对端在请求期间断开 |
💡 最佳实践:在 handler 中抛出带message的RpcError,错误信息会原样传递给调用方;其他类型异常只会以1500(Application Error)到达对端。完整错误定义见 utils.ts。
实战:转发 LLM function call 到浏览器端
这是 RPC 最亮眼的用法:LiveKit Agents 中的 LLM 决定执行某个 function call(如"打开闪光灯""查询用户数据")后,直接通过 RPC 把它转发给对应浏览器客户端执行,并同步取回执行结果——几行代码即可打通"云端 AI → 端侧执行 → 结果回流"的闭环。
流程示意:
LLM (Agent 端) 浏览器客户端 │ │ │ 1. performRpc('run-action', │ │ payload=JSON 参数) │ ├─────────────────────────────▶│ │ 2. handler 执行本地动作│ │ │ │ 3. return 执行结果(JSON) │ ◀──────────────────────────────┤接收端只需注册一个通用执行器,把 function call 的name与args映射到本地能力,返回 JSON 结果字符串;发送端(Agent 侧)拿到响应后即可把结果喂回 LLM 继续对话。完整参数与类型定义可参考 RpcClientManager.ts 与 extension.ts。
运行官方 RPC Demo
仓库内置了一个多参与者演示:caller向greeter发问候、向math-genius请求开平方/除法,并演示了错误处理与对端断开场景。
运行方式(在examples/rpc目录下):
pnpm install pnpm dev然后打开本地地址(通常是 http://localhost:5173),点击按钮即可观看完整演示。注意需先在.env.local配置LIVEKIT_API_KEY、LIVEKIT_API_SECRET和LIVEKIT_URL,详见 examples/rpc/README.md。
示例代码包含 5 个典型场景,推荐对照阅读:
- 基础问候:performGreeting
- 长数据往返(20KB 级 payload):performSendVeryLongInfo
- 错误处理(除以 0 抛出异常):performDivision
- 调用未注册方法:performQuantumHypergeometricSeries
- 对端断开的感知:performDisconnection
核心源码导航
想深入原理的同学可以按以下路径阅读:
- 扩展入口(
rpc扩展注册、API 挂载):src/room/rpc/extension.ts - 发起端管理器(请求发布、ACK 跟踪、超时):src/room/rpc/client/RpcClientManager.ts
- 接收端管理器(方法分发、响应回传):src/room/rpc/server/RpcServerManager.ts
- 参数与错误类型定义:src/room/rpc/utils.ts
- 可运行示例:examples/rpc/rpc-demo.ts
小结
livekit-client 的 RPC 用一对极简 API(registerRpcMethod+performRpc)就实现了房间内的请求-响应式远程调用,配合内置超时与错误体系,尤其适合把 LLM function call 转发到浏览器端执行的 AI 实时应用场景。建议先跑一遍 examples/rpc 示例,再结合本文错误码表把异常场景覆盖到位 🚀
【免费下载链接】client-sdk-js
LiveKit browser client SDK (javascript)
相关推荐
RabbitMQ RPC模式:请求-响应消息模式实战指南
RabbitMQ RPC模式:请求 响应消息模式实战指南 在分布式系统中,你是否遇到过服务间通信延迟高、耦合紧密的问题?是否在寻找一种既能保持异步优势,又能实现
消息队列后端消息路由流处理dsh-purge 安装指南:三步装好并验证生效
dsh purge 安装指南:三步装好并验证生效 dsh purge 是装在本机官方 DeepSeek Harness 上的红队评测清洗插件:给宿主运行时策略打
dsh-plugin网络安全AI 安全治理模型安全红蓝对抗人工智能5分钟快速上手Binance波动率交易机器人:从零开始的自动化交易配置教程
5分钟快速上手Binance波动率交易机器人:从零开始的自动化交易配置教程 想要在加密货币市场实现自动化交易却不知从何开始?Binance波动率交易机器人是一个
金融科技区块链
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考