# ERPC-doc
**Repository Path**: simpost/ERPC-doc
## Basic Information
- **Project Name**: ERPC-doc
- **Description**: ERPC(Embedded Remote Procedure Call)是一个简单的、易用的、高效的嵌入式远程调用框架。它不仅实现了远程调用,还实现了状态通知(观察者模式),同时还支持数据加密(用户可自定义加密算法)、异常监控和完备的日志管理方法。使用ERPC可简化系统的设计难度,降低模块之间的耦合度,降低开发人员之间的依赖性。
- **Primary Language**: C
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 99
- **Forks**: 49
- **Created**: 2019-07-30
- **Last Updated**: 2025-05-21
## Categories & Tags
**Categories**: rpc
**Tags**: None
## README
# ERPC(Embedded Remote Procedure Call)嵌入式RPC框架

ERPC(Embedded Remote Procedure Call)是**一个简单的、易用的、高效的远程调用框架**。
ERPC基于cJSON、libevent和libuv开源库,不仅实现了远程调用(RPC),还实现了状态通知(观察者模式),同时还支持数据加密(用户可自定义加密算法)、异常监控和完备的日志管理方法。
使用ERPC可简化模块的设计难度,降低模块之间的耦合度,降低开发人员之间的依赖性,从而实现嵌入式Linux系统下的多进程、多线程应用程序的快速实现、成型与部署。
## 目录
- [一、问题](#1)
- [二、内容](#2)
- [2.1 框架功能](#2.1)
- [2.2 外围功能](#2.2)
- [2.3 扩展知识](#2.3)
- [三、虚拟机](#3)
- [3.1 虚拟机下载](#3.1)
- [3.2 虚拟机使用](#3.2)
- [四、如何参与本项目?](#4)
## 一、问题
随着科技日新月异的快速发展,电子产品的功能越来越多,业务也越来越复杂。以前靠单打独斗完成电子产品的研发的时代已经慢慢远去,更多的是靠一个团队协作共同努力才能完成。这就为电子产品的设计和研发带来了新的问题:
- 团队的协作,有时是跨部门,甚至是跨地域的,这为沟通带来了很大的成本;
- 团队的开发,必然引入团队的管理,管理的成本也随团队的扩展而增加;
- 软件功能的独立性,导致不同功能采用不同的方法实现,接口也并不统一,开发任何新功能都需要研发人员投入大量精力去学习和熟悉,学习成本较高;
- 由于功能的复杂性,而开发周期一般较短,导致缺乏设计,很多产品的研发投入都是一锤子买卖,很难有一次研发投入,多个产品产出的情况,研发成本较高;
- 由于产品功能复杂,缺乏设计,产线生产成本,后续产品技术服务成本等后即成本不断上升,有甚者公司的研发、生产、技服的成本投入比达到1:2:3;
为了解决如上所有问题,我开发了这套ERPC框架:
- 它统一了应用程序开发方法,将编码拆分为功能实现和接口开发,为应用提供了统一标准化的接口方法,从而降低应用与服务开发者之间的沟通成本;
- 它将开发过程拆分成研发与部署两个阶段,这样更加便于管理优化,这也满足公司部门的划分和职能分工,更利于公司运作;
- 它简化了应用开发难度,将模块、进程、线程等过程全部吸收,应用只需要关注业务数据的处理实现和接口的编写,从而降低出错的概率;
- 它自带的监控程序和日志方法,可实时监控程序异常和任何业务的异常,非常便于问题的定位和解决,而不是以前的规避问题;
ERPC的好处远非如此,我认为它最核心是解决人员依赖的问题,让研发人员将精力放在真正的功能和接口实现,以及功能和性能的优化上面,这无论是对于研发人员,还是公司都是一个逐渐改善全局的、滚雪球式的快速增长方法。
## 二、内容(持续更新中)
### 2.1 框架功能
1. [ERPC特性](./doc/Framework/1.features.md)
2. [快速入门](./doc/Framework/2.QuickStart.md)
3. [使用手册](./doc/Framework/3.UserGuide.md)
- [框架接口](https://gitee.com/simpost/ERPC/blob/master/doc/Framework/3.UserGuide.md#3)
- [远程调用接口](https://gitee.com/simpost/ERPC/blob/master/doc/Framework/3.UserGuide.md#4)
- [观察者模式接口](https://gitee.com/simpost/ERPC/blob/master/doc/Framework/3.UserGuide.md#5)
- [工具集接口](https://gitee.com/simpost/ERPC/blob/master/doc/Framework/3.UserGuide.md#6)
4. [配置文件](./doc/Framework/4.Profile.md)
5. [日志系统](./doc/Framework/5.Logger.md)
6. [关于协议](./doc/Framework/6.Protocol.md)
7. 设计方法
### 2.2 外围功能
1. [cJSON](./doc/Peripheral/1.cJSON.md)
2. [libuv](http://docs.libuv.org/en/v1.x/index.html#)
3. [libevent](http://libevent.org/)
4. [zlog](http://hardysimpson.github.io/zlog/)
### 2.3 扩展知识
1. [json-rpc](./doc/Other/1.json-rpc.md)
2. [深入浅出RPC](./doc/Other/2.rpc-theory.md)
## 三、虚拟机
为了便于体验和使用,我使用VirtualBox虚拟机构建了一个CentOS7的系统,内部环境(主要是CMake、GCC编译器4.8.5版本)与编译库的一致,下载下来导入即可直接使用。
### 3.1 虚拟机下载
### 3.2 虚拟机使用
## 四、如何参与本项目?
由于ERPC仅仅只是一个跨线程、跨进程,甚至可以跨CPU的应用层框架,目前没有做具体的软件功能(比如多媒体、蓝牙),欢迎有能力的个人和公司基于本框架提供实质的功能。
我相信,如果基于这套框架实现的功能够完备的话,那么基于Linux系统的物联网的设备终端开发将会像搭积木一样的简单。
提交PR时请参照以下要求:
- 请确保推荐的资源自己使用过
- 提交PR时请注明推荐理由
- 最好提供可执行的服务进程以便体验
资源列表管理收到PR请求后,会定期(每周)在微博转发本周提交的PR列表,并在微博上面听取使用过这些资源的意见,确认通过后,会加入资源大全。
感谢您的贡献!
### 商务合作

### 赞赏与支持
