传输方式
一种 传输 是一个客户端接口,可以连接到 comms URI,并与对等方或服务交换实时消息。
客户端可以自由地按自己的方式实现传输(只要遵循其他客户端和服务所期望的协议),但下面的 推荐设计 下述设计已在实践中经过测试,并被证明能很好地与不同项目集成。`
标准传输
该协议定义了 5 种传输类型:
Websocket (
ws-room) 使用标准的 websocket 流。LiveKit (
livekit) 使用基于 WebRTC 的开源 LiveKit 框架。SignedLogin (
signed-login) 发送签名的 HTTPS 请求,以从服务器获取一个动态分配的传输。离线 (
offline) 是一个虚拟传输,表示当前环境中没有 comms。模拟器 (
simulator) 是一个具有完全自定义行为的虚拟传输,主要供开发者调试其实现。
通过传输接口发送和接收的消息始终相同(见 消息)。某些传输在传输过程中可能会将它们封装在控制结构中,但在跨过 传输 接口之前应将其解包。
推荐设计
这是一个最小的 传输 用 TypeScript 编写的接口:
interface Transport {
// 使用 URI 初始化传输:
constructor(private uriWithConnectionParams: string)
// 使用构造函数中给定的 URI 打开连接:
connect(): Promise<void>
// 关闭连接:
disconnect(): Promise<void>
// 向服务和所有对等方发送任意载荷:
send(packet: Packet): Promise<void>
// 订阅来自服务和所有对等方的传入消息:
on(event: 'receive', callback: (packet: Packet) => void): void
}实际实现通常会扩展此接口,添加连接/断开连接和加入/离开事件、非广播发送、更严格的类型或特定语言的适配。
传输 URI
的值 uriWithConnectionParams 始终采用以下形式:
该 <type> 对应于上面列出的一种,而 <type connection parameters> 的格式取决于具体的传输。它可以是 URL、不可读令牌或任意数据。
该 LiveKit 传输,例如,使用一个 wss 带有一个 access_token 参数的 URL 来建立经过身份验证的连接:
相比之下, Websocket 传输也使用一个 wss URL,但不使用预生成的令牌。连接后需要进行身份验证流程。
创建传输
由于每个 传输 类都支持特定类型的 URI,因此最好提供一个工厂方法,要么返回一个有效的 传输 ,要么立即失败。例如:
客户端不必实现所有标准传输。如果他们只打算使用已定义类型的一个子集,而不打算处理所有 URI,那么他们可以自由拒绝不支持的类型。
功能更丰富的客户端,例如 World Explorer,建议至少实现 websocket 和 LiveKit 传输,因为它们目前被所有主要世界使用。
了解更多
最后更新于