zenoh ts sdk 内部实现简单说明
以前简单说过zenoh 内部是直接支持websocket 协议的,但是如果需要使用websocket就需要自己包装特定的消息体才能通信
为了方便web使用(同时也支持node)zenoh ts sdk 基于remote plugin (同样也是暴露websocket api),之后包装为标准zenoh
api 模式访问
内部处理
此插件的处理比较有意思,因为尽管暴露了websocket api 但是还是需要不少类型定义的,这样才能确保与现有zenoh sdk的处理时候一致的,zenoh 开发上基于了ts-rs 这个rust crate 快速生成类型定义,内部websocket 的实现是基于了tokio-tungstenite 一个面向stream 的websocket 处理,对于client ts 客户端基于了websocket 通道,但是实际协议消息处理使用了channel-ts 这个库进行数据处理,remote plugin 内部包含了控制协议以及数据协议的处理,控制类的主要是对于发布,订阅,查询,删除,获取等的处理,依赖一个StateMap进行状态处理,数据处理主要是对于控制创建的服务进行数据的处理(比如订阅,发布,查询),目前zenoh数据基于base64 传输,通信上通过json
说明
对于ts sdk 内部的实现尽管是客户端发起的,但是实际上client 只是调用remote plugin 包装的能力,具体还都是插件处理的,以上只是一个简单说明,后边会结合运行,完整介绍下内部机制,不少设计上很值得学习
参考资料
zenoh-plugin-remote-api/src/interface.rs
https://github.com/eclipse-zenoh/zenoh-ts
https://github.com/Aleph-Alpha/ts-rs
https://github.com/arjsin/channels