![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式网络通信框架mprpc项目
FuzhouJiang
专注后端、C/C++开发的菜鸟,相信日拱一卒、功不唐捐。欢迎各位对博文批评指正,互相学习
展开
-
分布式网络通信框架(十五)——Mprpc项目总结
会一直阻塞下去),也就是指定的timeout时间内没有收到rpc 请求的响应,判断当前rpc 请求失败,此处为了实现高可用性,可以再尝试请求比如3 次,3 次都失败的话,可以从zookeeper 上查询还有没有其它主机提供同样的rpc 服务,然后重新向新主机发起请求,直到请求成功,如果所有提供该rpc 服务的主机都没有响应或已经没有其它主机提供该rpc 服务了,那么尝试3 次后,可以判定请求失败(确实有其它因素导致所有的服务器都挂掉了,这一般是严重的线上bug)。,封装了很好用的接口,之前只用过json。原创 2023-05-29 10:43:38 · 3310 阅读 · 1 评论 -
分布式网络通信框架(十四)——使用mprpc编写客户端(服务调用方)程序示例
这个静态库和对应头文件,进行编译生成可执行文件。原创 2023-05-29 10:26:58 · 252 阅读 · 0 评论 -
分布式网络通信框架(十三)——zookeeper C++客户端编程
zookeeperC++客户端编程很类似于MySQL客户端编程,就是以C++代码实现zk客户端的常见功能,比如getdeletecreate等.原创 2023-05-29 10:19:05 · 1076 阅读 · 0 评论 -
分布式网络通信框架(十二)——zookeeper简介与安装
zookeeper(后文简称zk)提供功能有:服务注册中心、全局服务命名、以及分布式锁。RPC服务会被发布到不同的服务器上,本项目zk的作用就是找到某一个RPC服务在哪一个服务器上,提供服务注册发现功能。原创 2023-05-29 10:04:02 · 791 阅读 · 0 评论 -
分布式网络通信框架(十一)——logger日志系统设计实现
模板类的声明和成员函数实现最好都是实现在同一个头文件,分文件编写可能造成链接错误,日志模块是生产者消费者模型。工作方式,多个线程往队列写日志,一个专门的写线程从队列中读取日志信息写入磁盘中的日志文件。:线程安全,线程间通信,队列,生产者消费者模型。本项目所实现的日志模块采用。原创 2023-05-29 09:47:24 · 328 阅读 · 0 评论 -
分布式网络通信框架(十)——Mprpc框架使用示例
然后在客户端(服务调用方caller)业务代码中使用Stub对象来调用希望调用的方法,并且接收响应。主要的工作就是实现一个新类继承于 UserServiceRpc,并且重写其对应的虚函数。生成的.h文件中找函数的声明,如Login)然后自己实现一个提供服务的.cc文件(如。)和服务方法成员,以及一些相关的消息(),其中提供获取好友列表的rpc方法(类型,然后再添加希望提供的服务。)和 其中的方法 rpc (如。) ,并且重写对应的方法(从。文件,让其生成对应的服务类(的业务代码中实现一个继承。原创 2023-05-28 21:26:29 · 956 阅读 · 0 评论 -
分布式网络通信框架(九)——RpcChannel调用过程
客户端使用RpcChannel对象来构造对象,并利用该对象中来进行rpc调用请求,RpcChannel。原创 2023-05-28 21:02:30 · 372 阅读 · 0 评论 -
分布式网络通信框架(八)——RpcProvider分发rpc服务
分发rpc服务,我们实现的框架代码就是主要完成如下红圈部分的任务:客户端(请求调用方)发送请求时需要发args_size, 其中args_size防止粘包问题,于是采用如下的消息格式设计(消息成员长度,占4B) +header_str(消息成员)// 定义RPC请求头消息格式// 请求的服务名// 请求的方法名// 请求的方法的参数大小。原创 2023-05-28 20:51:45 · 404 阅读 · 0 评论 -
分布式网络通信框架(七)——RpcProvider发布服务方法
利用muduo库的来实现数据的收发,利用protobuf来实现数据的序列化(发送前)和反序列化(接收后)发布服务主要在实现,重点在于生成一张表,记录服务对象和其发布的所有服务方法// 保存服务对象的地址 std :: unordered_map < std :: string , const google :: protobuf :: MethodDescriptor * > m_methodMap;// 保存服务方法映射<方法名, 方法描述符指针> };原创 2023-05-28 20:10:43 · 331 阅读 · 0 评论 -
分布式网络通信框架(六)——开发RpcProvider的网络服务
因为RPC服务器必然是要接受大量客户端的调用请求,所以需要一个。原创 2023-05-28 20:03:03 · 373 阅读 · 0 评论 -
分布式网络通信框架(五)——Mprpc框架基础类设计
根据上面的需求,我们可以设计两个类。原创 2023-05-28 19:55:08 · 426 阅读 · 0 评论 -
分布式网络通信框架(四)——本地服务发布成RPC服务
通过这个例子,目的在于了解RPC框架在服务提供方servercallee)的使用,从而更好理解实现代码。原创 2023-05-28 19:50:30 · 414 阅读 · 0 评论 -
分布式网络通信框架(三)——protobuf使用案例
下面的例子使用service关键字定义描述rpc方法的类型,并且注意开头要设置option// 声明了protobuf版本// 声明了代码所在的包(生成C++代码后就是namespace 名字)// 定义下面的选项,表示生成service服务类和rpc方法描述,默认不生成// 定义登录消息类型// =1 代表name是这个message第一个字段,不是指name的值// 定义登录响应消息enum SexMAN = 0;WOMAN = 1;原创 2023-05-28 19:36:17 · 1315 阅读 · 0 评论 -
分布式网络通信框架(二)——RPC通信原理和技术选型
也就是数据的序列化和反序列化,用。方法调用的序列化和反序列化。服务配置中心(服务发现):设计rpc方法参数的。不需要存储额外信息;:顶层的cmake文件。:网络部分,包括寻找。原创 2023-05-28 17:06:19 · 448 阅读 · 0 评论 -
分布式网络通信框架(一)——集群和分布式
每一个模块独立部署运行在一个服务器主机上,所有服务器协同工作共同提供服务,每一台服务器称作分布式的一个。机器1上的一个模块进程1怎么调用机器1上的模块进程2里面的一个业务方法呢?1可以再集群部署出分布式节点1-1,分布式节点1-2,…大系统的软件模块怎么划分?机器1上的模块怎么调用机器2上的模块的一个业务方法?比如后台管理不需要高并发,所以不需要每台机器都部署。密集型,造成各模块对硬件资源的需求是不一样的。,根据节点的并发要求,对一个节点可以再做。虚拟化环境中),各模块之间该怎么访问呢?原创 2023-05-28 17:01:05 · 1918 阅读 · 2 评论