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

https://docs.rs/ts-rs/latest/ts_rs/

https://github.com/snapview/tokio-tungstenite

posted on 2025-01-01 08:00  荣锋亮  阅读(2)  评论(0编辑  收藏  举报

导航