当前位置: 首页 > 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

相关文章:

C++轻量级RPC库RpcCore

C轻量级的RPC库,可用于任何项目中,甚至单片机。 方便平台直接相互进行功能调用。 基于asio的实现 asio_net 也可用在esp32适用于ESP32/ESP8266的实现 esp_rpc 目前也有一些轻量的库,参考了protobuf(或者依赖它)&…...

Mysql的视图

视图的特点: 1.视图可以看做一个虚拟的表,本身是不存储数据的。 视图的本质可以看作是存储起来的select语句 2.视图中涉及到的表都统称为基表 3.针对视图多DML操作,会影响到对应基表中的数据。反之亦然 4.视图本身的删除,不会…...

2/12考试总结

时间安排 8:30–8:50 读题,T1 不知道是个啥,T2是个dp ,T3可能也是 dp 之类的。 8:50–9:30 T1,读了好几遍才理解了题意,对于部分分有爆搜。考虑正解,想到预处理后O(1) 查询,问题是如何由已知的信息得到所有…...

第三章虚拟机的克隆,快照,迁移删除

1.虚拟机的克隆 如果你已经安装了一台linux操作系统,你还想再更多的,没有必要再重新安装,你只需要克 隆就可以,看演示。 方式1,直接拷贝一份安装好的虚拟机文件,再用虚拟机打开这个文件方式2,使用vmware的…...

华为OD机试 - 任务总执行时长(Python)| 真题含思路

任务总执行时长 题目 任务编排服务负责对任务进行组合调度。 参与编排的任务又两种类型, 其中一种执行时长为taskA, 另一种执行时长为taskB。 任务一旦开始执行不能被打断,且任务可连续执行。 服务每次可以编排 num 个任务。 请编写一个方法,生成每次编排后的任务所有可…...

LeetCode 热题 C++ 114. 二叉树展开为链表

给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1&#xf…...

Spring的事务控制-基于AOP的声明式事务控制

Spring的事务控制-基于AOP的声明式事务控制 Spring事务编程概述 事务是开发中必不可少的东西,使用JDBC开发时,我们使用connection对事务进行控制,使用MyBatis时,我们使用SqlSession对事务进行控制,缺点就是&#xff…...

SSO(单点登陆)

Single Sign On 一处登陆、处处可用 0、前置概念: 1)、单点登录业务介绍 早期单一服务器,用户认证。 缺点:单点性能压力,无法扩展 分布式, SSO(single sign on)模式 解决 : 用户身份信息独…...

线程和QObjects

QObject的可重入性: QThread继承了QObject,它发出信号以指示线程开始或完成执行,并提供一些插槽。 QObjects可以在多个线程中使用发出调用其他线程中槽的信号,并将事件发布到在其他线程中“活动”的对象。这是可能的&#xff0…...

最新中文版FL Studio21水果软件下载安装图文教程

FL Studio是目前流行广泛使用人数最多音乐编曲制作软件,这款软件相信广大网友并不陌生,今天带来的是FL中文版本,所有的功能都能在线编辑,用户直接就能操作,同时因为是21水果是最新版,所以增加了新的功能&am…...

pandas数据分析35——多个数据框实现笛卡尔积

什么是笛卡尔积。就是遍历所有组合的可能性。 比如第一个盒子有[1,2,3]三个号码球,第二个盒子有[4,5]两个号码球。那么从每个盒子里面分别拿一个球共有3*2两种可能性,其集合就是{[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]},这个就是笛卡尔积。 三个盒子也是…...

【C语言学习笔记】:数组倒序排列,数组倒置

数组倒置就是将数组元素中的数据倒过来&#xff01; 举个例子&#xff0c;比如下面程序&#xff1a; #include <stdio.h>int main(void) { int a[5] {1, 2, 3, 4, 5}; int b[5]; //用来存放倒置后的数据 int i, j; for (i0, j4; i<5, j>0; i, --j)…...

sni+tomcat漏洞复现

sni SNI产生背景 SSL以及TLS&#xff08;SSL的升级版&#xff09;为客户端与服务器端进行安全连接提供了条件。但是&#xff0c;由于当时技术限制&#xff0c;SSL初期的设计顺应经典的公钥基础设施 PKI(Public Key Infrastructure)设计&#xff0c;PKI 认为一个服务器只为一个…...

Linux ALSA 之十:ALSA ASOC Machine Driver

ALSA ASOC Machine Driver一、Machine 简介二、ASoC Machine Driver2.1 Machine Driver 的 Platform Driver & Platform Device 驱动模型2.2 在 Probe() 中注册声卡三、snd_soc_register_card 函数3.1 bind DAIs3.2 New a sound card3.3 Create card new widgets3.4 Probe …...

Spring 面试题(一):Spring 如何处理全局异常?

❤️ 博客首页&#xff1a;水滴技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; &#x1f338; 订阅专栏&#xff1a;Spring 教程&#xff1a;从入门到精通 文章目录1、如何处理全局异常2、代码示例2.1、定义统一的“响应结果对象”2.2、…...

Threadlocal为何引发内存泄漏问题

首先我们要先了解什么是泄漏问题和什么是内存溢出 内存泄漏表示程序员申请了内存&#xff0c;但是该内存一直无法被释放 内存溢出表示申请内存不足&#xff0c;就会报错 为何引发内存泄漏问题 因为每个线程都有自己独立的ThreadLocalMap对象&#xff0c;key为ThreadLocal&…...

如何写好 Python 的 Lambda 函数?

当你需要完成一件小工作时&#xff0c;在本地环境中使用这个函数&#xff0c;可以让工作如此得心应手&#xff0c;它就是 Lambda 函数。 Lambda 函数是 Python 中的匿名函数。有些人将它们简称为lambdas&#xff0c;它们的语法如下&#xff1a; lambda arguments: expression…...

大数据技术架构(组件)32——Spark:Spark SQL--Execute Engine

2.2、Spark SQL2.2.1、Execute EngineSparkSql的整体提交执行流程和Hive的执行流程基本上一致。站在通用的角度&#xff0c;对于SparkSql来说&#xff0c;从Sql到Spark的RDD执行需要经历两个大的阶段&#xff1a;逻辑计划和物理计划逻辑计划层面会把用户提交的sql转换成树型结构…...

Leetcode.1138 字母板上的路径

题目链接 Leetcode.1138 字母板上的路径 Rating &#xff1a; 1411 题目描述 我们从一块字母板上的位置 (0, 0)出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board ["abcde", "fghij", "klmno", "pqr…...

一个自动配置 opengrok 多项目的脚本

前段时间在服务器上配置 opengrok 阅读代码&#xff0c;项目有很多个&#xff0c;一个一个手动配置比较繁琐。 我从搭建 tomcat 和 opengrok&#xff0c;到配置和索引完 5 个 Android 项目&#xff0c;用了差不多一整天。 要是再让我手动配置几个项目&#xff0c;估计真要崩溃…...

告别mmWave Studio报错:手把手教你搞定AWR2243数据采集的6个常见故障

告别mmWave Studio报错&#xff1a;手把手教你搞定AWR2243数据采集的6个常见故障 毫米波雷达开发者在数据采集阶段常会遇到各种技术障碍。AWR2243作为工业级高频雷达模块&#xff0c;其配套的mmWave Studio软件在实际操作中可能出现多种报错&#xff0c;影响开发效率。本文将针…...

026 AI 漫剧工具推荐手册,附详细使用教程

2025 年&#xff0c;中国动画微短剧市场规模达 189.8 亿元&#xff0c;同比增长 276.3%&#xff0c;预计 2030 年将突破 850 亿元。与此同时&#xff0c;2026 年 AI 漫剧用户规模将从 1.2 亿飙升至 2.8 亿&#xff0c;市场规模有望突破 240 亿元。这一组数据有多震撼&#xff1…...

告别‘天书’!手把手教你用vdex2dex、odex2smali等工具,把Android应用的vdex/odex/cdex转成可读的dex文件

Android逆向工程实战&#xff1a;从vdex/odex/cdex到可读dex的完整指南 当你兴致勃勃地打开一个APK文件准备分析时&#xff0c;却发现里面只有vdex、odex或cdex文件&#xff0c;用JADX直接打开全是乱码——这种挫败感每个逆向工程师都经历过。本文将带你一步步破解这些"天…...

npc_gzip异常处理与调试手册:解决压缩器错误的10个实用技巧

npc_gzip异常处理与调试手册&#xff1a;解决压缩器错误的10个实用技巧 【免费下载链接】npc_gzip Code for Paper: “Low-Resource” Text Classification: A Parameter-Free Classification Method with Compressors 项目地址: https://gitcode.com/gh_mirrors/np/npc_gzip…...

态是相关,势是因果,感是具身,知是离身

态是相关&#xff0c;势是因果&#xff0c;感是具身&#xff0c;知是离身&#xff0c;用四个高度概括的词&#xff0c;切中了“人机环境系统智能”中态势感知四个核心维度的本质属性。我们可以结合之前的探讨&#xff0c;来深入拆解一下这句“十六字真言”&#xff1a;态是相关…...

并发编程小记---5.17

final类型的特点&#xff1a;final 变量&#xff1a;赋值后不能改&#xff08;引用地址不可变&#xff09;final 方法&#xff1a;不能被子类重写final 类&#xff1a;不能被继承引用类型&#xff1a;Java 数据类型就两种&#xff1a;基本数据类型&#xff1a;byte short int l…...

Sub-agent 协同失效的 3 类边界场景:Claude Code 8.1 机制原理解析

1. Sub-agent 协同失效不是 Bug,是机制在“按说明书执行” 大多数人第一次遇到 Sub-agent 返回空响应、反复循环调用主 Agent、或在多轮协作后突然“忘记”前序任务时,第一反应是:配置错了?网络不稳定?模型退化了?我试过把 claude-code 从 8.0.3 升到 8.1.1,又降回 8.0…...

芯片时钟树设计实战:平衡性能、功耗与鲁棒性的后端工程指南

1. 项目概述&#xff1a;从“动脉”视角理解时钟树在芯片设计的浩瀚世界里&#xff0c;时钟信号就像是整个系统的“动脉”。它不负责输送数据&#xff0c;但负责为所有逻辑单元提供统一的“心跳”节拍。没有稳定、同步的心跳&#xff0c;再强大的计算单元也会陷入混乱。我们常说…...

Claude Code + Windows 桌面消息通知配置指南

Claude Code Windows 桌面通知配置指南 让 Claude Code 在完成任务后自动弹出 Windows 桌面通知&#xff0c;不用一直盯着屏幕等。 前置条件 Windows 10 或 Windows 11Claude Code CLI 已安装并能正常使用 安装步骤 第一步&#xff1a;创建通知脚本 创建目录 %USERPROFILE%\.cl…...

当贝盒子H5 64G版618首销TOP1!多平台登顶,凭什么这么火?

2026年5月14日&#xff0c;当贝官方发布了618抢先购首日当贝盒子H5 64G版的首销战报。据官方数据显示&#xff0c;这款重磅升级的电视盒子在京东、天猫、抖音三大主流电商平台的电视盒子类目热销榜中&#xff0c;全部拿下TOP1席位&#xff0c;成为今年618大促第一天的现象级爆款…...