当前位置: 首页 > news >正文

C++轻量级RPC库RpcCore

C++轻量级的RPC库,可用于任何项目中,甚至单片机。
方便平台直接相互进行功能调用。

  • 基于asio的实现 asio_net 也可用在esp32
  • 适用于ESP32/ESP8266的实现 esp_rpc

目前也有一些轻量的库,参考了protobuf(或者依赖它),基于IDL。
其实对于中小型的项目而言,使用IDL并不是一个好的选择,使用也不方便。

仓库地址

https://github.com/shuai132/RpcCore

以下是README,方便SEO。最新文档请打开上述链接。

RpcCore

RPC Core library, designed for IOT, support most microchip(Arduino、STM32、ESP8266)

Introduction

完善的RPC框架(如gRPC)使用复杂,尤其在嵌入式平台更不现实。
本项目提供轻量级的消息注册、解析分发功能以及方便使用的API。

注:本仓库只提供协议层和API,不包含传输层实现。基于TCP的实现见文末Links

Features

  • 简单高效易用 支持性能受限的平台
  • Header-Only 仅有头文件
  • 支持任意形式的连接(串口、TCP等)
  • 提供基本数据类型、结构体、字符串、二进制类型的序列化实现
  • 方便自定义消息类型 提供了Flatbuffersjson的实现
  • 提供Dispose基于RAII自动取消请求 方便UI相关应用
  • 支持设置超时重试次数
  • std::future接口

Requirements

  • C++11
  • 数据收发需要完整的数据包,例如WebSocket。
    如果用Socket/串口等需要自己实现消息打包解包。可使用:PacketProcessor
    或 data_packer.hpp

Usage

  1. 在自己的项目添加搜索路径
include_directories(RpcCore的目录)
  1. 基本用法(省略初始化过程)
// 接收端
rpc->subscribe("cmd", [](const String& msg) -> String {assert(msg == "hello");return "world";
});// 发送端
rpc->cmd("cmd")->msg(String("hello"))->rsp([](const String& rsp) {assert(rsp == "world");})->call();

详细的初始化流程和单元测试见:RpcTest.cpp

Design

类说明

外部接口

  • Connection 提供收发实现
  • Rpc 提供注册消息和创建请求的方法
  • Request 提供消息请求的各种方法
  • Message 消息自定义序列化/反序列化规则
  • Dispose 通过RAII的方式 用于自动取消Request

内部实现

  • MsgWrapper 包装Message 用于内部传输解析
  • MsgDispatcher 解析MsgWrapper 分发消息
  • Coder MsgWrapper序列化实现

Plugin

  • JsonMsg.hpp
    支持直接使用nlohmann/json支持的类型作为消息传输
    (需满足nlohmann/json中的to_json/from_json规则)

  • FlatbuffersMsg.hpp
    支持直接使用Flatbuffers生成的类型作为消息传输(flatc需添加参数--gen-object-api)

Links

  • 基于asio的实现 asio_net
  • 适用于ESP32/ESP8266的实现 esp_rpc
http://www.lryc.cn/news/4421.html

相关文章:

  • Mysql的视图
  • 2/12考试总结
  • 第三章虚拟机的克隆,快照,迁移删除
  • 华为OD机试 - 任务总执行时长(Python)| 真题含思路
  • LeetCode 热题 C++ 114. 二叉树展开为链表
  • Spring的事务控制-基于AOP的声明式事务控制
  • SSO(单点登陆)
  • 线程和QObjects
  • 最新中文版FL Studio21水果软件下载安装图文教程
  • pandas数据分析35——多个数据框实现笛卡尔积
  • 【C语言学习笔记】:数组倒序排列,数组倒置
  • sni+tomcat漏洞复现
  • Linux ALSA 之十:ALSA ASOC Machine Driver
  • Spring 面试题(一):Spring 如何处理全局异常?
  • Threadlocal为何引发内存泄漏问题
  • 如何写好 Python 的 Lambda 函数?
  • 大数据技术架构(组件)32——Spark:Spark SQL--Execute Engine
  • Leetcode.1138 字母板上的路径
  • 一个自动配置 opengrok 多项目的脚本
  • JAVA同步代码块 同步方法
  • 分享111个助理类简历模板,总有一款适合您
  • Allegro如何更改临时高亮的颜色设置操作指导
  • 知识图谱嵌入技术研究综述
  • Scratch少儿编程案例-水果忍者-超完整
  • 练 习
  • Urho3D整体结构
  • 大数据技术之Hudi
  • libxlsxwriter条件格式
  • nodejs+vue+elementui在线求助系统vscode
  • 电子技术——BJT差分输入对