凌鲨(linksaas)的客户端架构
客户端使用了tauri作为大框架来进行研发,选择理由:
- 稳定性,tauri底层逻辑都是rust写的,只要不用unsafe,基本可以保证零崩溃,也可以保证较小的内存使用。
- 便捷的插件体系,只要在rust函数上打上#[tauri::command]即可。如果在electron中增加插件,需要用c++,并了解v8的一些基本结构。
- 更好的性能,参考Benchmarks | Tauri Apps
从几个月的开发体验来说,使用tauri基本没遇到什么大的坑。
我们在plugins里面主要集成了和服务端的通信协议,和外部研发体系互动部分放在了shell里面。shell以sidecar方式集成在tauri里面。
这样做的原因:
- 保持主体程序的稳定性
- 和外部系统交互的频次远小于对服务端的调用
- 方便添加功能
shell目前是用rust开发的,后续可能会换成golang。
关于通信协议
我们主要使用grpc作为主要通信协议,mqtt用来做push通知使用。
使用grpc的原因:
- 协议变更的兼容性
- 支持流式传输
- 多路复用
- 支持主流的编程语言
相关代码
- 通讯协议定义 linksaas / proto · GitLab
- 通讯协议生成的rust代码 linksaas / proto-gen-rust · GitLab
- shell linksaas / shell · GitLab
- 客户端 linksaas / desktop · GitLab