zenoh rpc 内部实现简单说明

以前简单提过zenoh rpc,整体来说功能点很不错,但是目前实现上相对简单,以下简单说明下内部实现处理

整体内部实现

整体上并没有太多特殊的地方,核心还是利用了zenoh 的declare_queryable 能力,对于服务的发现,服务访问,基于了key_exps

Server 处理

  • 参考图

如下图,zenoh rpc 对于服务定义了一个rpc 抽象接口,具体的服务需要实现定义(call 进行实际方法的处理,属于一个服务的dispatcher ),每个服务注册基于session zid 作为唯一标识进行区分,会在@rpc/<id>/** 上注册 declare_queryable 处理能力,包含了rpc 实际方法处理以及metadata 的查询,对于实际服务的方法调用都是query.replay 进行数据response 处理,当然还注册了基于服务名的liveliness token(此能力很强大,可以进行实时状态的追踪,但是目前的rpc 实现缺少使用),在内部方法调用处理上基于了server 提供的service_call 会基于key 进行拆分(包含了id,服务名称,方法名称)

client 处理

client 处理部分基于了server 抽象的一个RPCClientChannel,处理上如下图,目前比较多,client 部分需要自己实现一个获取服务id 找服务的方法,实际client 做的事情比较多,官方代码中有一个示例可以参考

说明

基于zenoh 作为rpc 的传输层是一个很不错的选择,可以实现灵活的跨网络访问,目前zenoh rpc 上有利用到zenoh 的一些新特性(比如liveliness)但是目前能力上还是比较弱的,实际上我们可以参考官方的机制,自己扩展,同时也可以实现灵活的跨语言处理(目前zenoh 以及提供了不少语言的sdk),当前源码也相对比较简单,可以阅读学习下

参考资料

https://github.com/ZettaScaleLabs/zenoh-rpc

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

导航