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

JsonRpc框架介绍和环境搭建

JsonRpc框架C++

1.项目介绍

RPC(Remote Procedure Call)远程过程调用,是⼀种通过网络从远程计算机上请求服务,而不需要了解底层网络通信细节。RPC可以使用多种网络协议进行通信,如HTTP、TCP、UDP等,并且在TCP/IP网络四层模型中跨越了传输层和应用层。简言之RPC就是像调用本地方法⼀样调用远程方法。过程可以理解为业务处理、计算任务,更直白的说,就是程序/方法/函数等,就是像调用本地方法⼀样调用远程方法。

一个完整的RPC通信框架,大概包含一下内容:

  • 序列化协议
  • 通信协议
  • 连接复用
  • 服务注册
  • 服务发现
  • 服务订阅和通知
  • 负载均衡
  • 服务监控
  • 同步调用
  • 异步调用

我们的项目时基于C++、JsonCpp、muduo网络库实现一个简单易用的Rpc通信框架,即使是不懂网络的开发者也可以很快速的上手,他实现了以下功能:

  • 同步调用、异步Callback调用、异步future调用
  • 服务注册/发现、服务上线/下线、服务订阅/发布

2.技术选型

序列化和反序列化:

JSON:因为项目中需要使用 JSON 来定义函数参数和返回值,所以项目中直接采用 JSON 进行序列化和反序列化。

网络传输:

直接采用muduo库,学习开发成本较低。原生socket实现难度较大,暂不考虑。

网络传输的参数和返回值如何映射到对应的Rpc接口上:

我们采用更通用的类型,比如 JSON 类型来设计好参数和返回值协议即可。

Rpc的实现方案:

实现一个远程调用接口call,然后通过传入函数名和参数来调用Rpc接口。


3.开发环境

  • Linux (Ubuntu-22.04)
  • VSCode/Vim
  • g++/gdb
  • Makefile

4.环境搭建Ubuntu-22.04

我们演示采用~/Json_rpc路径。

安装wget,一般情况下会自带

ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install wget

更换国内软件源

先备份原来的/etc/apt/source.list文件

ubuntu@VM-20-3-ubuntu:~/Json_rpc$
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

添加软件源文件内容,新增以下内容

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
#添加清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

新增完毕后,更新源

ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get update

安装lrzsz传输工具

ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install lrzsz
ubuntu@VM-20-3-ubuntu:~/Json_rpc$rz --version
rz (lrzsz) 0.12.20

安装编译器gcc/g++

ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install gcc g++

安装项目构建工具make

ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install make

安装调试器gdb

ubuntu@VM-20-3-ubuntu:~/Json_rpc$duso apt-get install gdb

安装cmake

ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install cmake
ubuntu@VM-20-3-ubuntu:~/Json_rpc$cmake --version
cmake version 3.22.1

安装jsoncpp

ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install libjsoncpp-dev

安装muduo库

  • 下载源码
ubuntu@VM-20-3-ubuntu:~/Json_rpc$git clone https://github.com/chenshuo/muduo.git

由于网络原因可能获取不到完整内容,建议这样

ubuntu@VM-20-3-ubuntu:~/Json_rpc$git clone https://gitee.com/jimmywang16/muduo_zip.git
  • 安装依赖环境
ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install libz-dev libboost-all-dev
  • 运行脚本编译安装
ubuntu@VM-20-3-ubuntu:~/Json_rpc$cd muduo_zip
ubuntu@VM-20-3-ubuntu:~/Json_rpc/muduo_zip$unzip muduo-master.zip

现在 Json_rpc/muduo_zip 下会存在两个文件:muduo-master.zipmuduo-master

ubuntu@VM-20-3-ubuntu:~/Json_rpc/muduo_zip$cd muduo-master
ubuntu@VM-20-3-ubuntu:~/Json_rpc/muduo_zip/muduo-master$./build.sh
ubuntu@VM-20-3-ubuntu:~/Json_rpc/muduo_zip/muduo-master$./build.sh install

走到这里已经完成,结束后会生成 build 目录

我们看一下文件结构:

ubuntu@VM-20-3-ubuntu:~/Json_rpc/muduo_zip$ls
build muduo-master muduo-master.zip

这个./build.sh install实际上把muduo的头文件和lib库文件放到了muduo-master同级目录下的build目录下的release-install-cpp11文件夹下面了,我们编译程序时指定muduo库的头文件和库文件路径即可。

详细安装muduo网络库教程

http://www.dtcms.com/a/529244.html

相关文章:

  • 网站右下角悬浮窗口js代码 兼容各浏览器如何看还在建设的网站
  • qq浏览器收录网站提交入口wordpress 博客 视频
  • 关于宽带网络下公网地址的理解
  • 【面经】2025年软件测试面试题,精选100 道(附答案)
  • 网站风格优势网页设计哪里好
  • 案例研究_CVE-2018-1000517
  • 内存补丁技术:破解与防护的终极对决
  • 20251019状压DP总结
  • 西部数码网站管理助手v3.0产品设计ppt案例
  • 【2073】三角形面积
  • Datawhale秋训营-“大运河杯”数据开发应用创新大赛
  • 7(内存管理)(上)(了解)
  • 成都个人建网站ps软件下载电脑版免费怎么下载
  • 解析常见的限流算法
  • 潼南区做网站的公司中国医院建设协会网站
  • 夸克 × 大模型:从“搜索工具”到“智能体”的演化逻辑
  • 网站正在建设中色综合网页程序开发工具
  • 个人怎么开网上超市福州百度seo
  • 笔试强训(八)
  • 山西品牌网站建设成品网站源码68w68游戏
  • Linux内核进程管理子系统有什么第六十八回 —— 进程主结构详解(64)
  • 做网站需要商标注册吗阿里巴巴怎么做企业网站
  • 做视频网站需要哪些技术指标wordpress可以放视频吗
  • 动态库的使用-openssl
  • Maven 项目和 Maven Web 项目的异同点
  • Maven整理
  • 关于OpenAI CLIP的综合技术报告:架构、对比预训练与多模态影响
  • 网上服装商城网站代码软件开发 网站建设
  • 保洁网站模板闲置物品交易网站怎么做
  • 11月更新|流程节点新增数据变更+发起流程