cpp-tbox 之 RPC 通信服务

2024-04-26 01:04
文章标签 服务 rpc 通信 cpp tbox

本文主要是介绍cpp-tbox 之 RPC 通信服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

jsonrpc

序列化与反序列化基于的是json

Proto

该类设计用于处理网络或传输层数据接收和发送,同时提供一些回调函数接口来定义如何处理接收到的数据和发送数据,也就是整个RPC的框架类

对于接收请求的回调函数,参数是请求id,方法名method,请求参数params

对于接收响应的回调函数,参数是请求id(用于异步回复),错误码errcode,错误信息result

对于发送数据的回调函数,参数是数据指针和数据大小

包括发送请求,发送响应结果,发送错误,这些过程都是RPC框架的系列。所有的参数都会变成Json,他们最终都会调用sendJson。

接受到数据需要解包和处理

以上是RPC框架提供的相关方法,对于针对性的RPC框架需要实现下面两个函数,即对Json数据发送/Json数据接收。

在RPC基类框架proto中onRecvJson的实现其实就是对Json进行讨论拆分,包括一些健壮性判断,以及拆分成功后作为入参调用对应的回调函数。它的接口是对js进行处理,对于不同协议,我们只需要将传输内容反序列化成合适的Json对象就可以调用统一的onRecvJson接口。

raw_stream_proto

裸流协议TCP

通过对Json特征字符进行拆分来划分数据包,重写onRecvData和sendJson.

send_data_cb_提供一个函数接口给网络传输,做到功能解耦。

FindEndPos是自己封装的Json解析函数,找到Json结束的位置,再使用Json自带的parse对其进行反序列化。该种方式使用于流式协议TCP。最后调用统一接口onRecvJson。

packet_proto

分包协议UDP/MQTT/HTTP

同上

分包协议本身就是按完整的数据包即Json数据进行发送

header_stream_proto

使用序列化对象pack对json_text进行序列化,添加了魔幻数和头部信息

send_data_cb_部分是相同的

使用Deserializer unpack对data_ptr反序列化,将头部信息拆出来,魔幻数用于检验和,后序和上面的proto是一样的。

Rpc

这是一个简单的远程过程调用(RPC)类的声明,用于在网络通信中进行方法调用和通知。它提供了添加服务、发送请求、发送通知以及发送异步回复等功能

method_services_是服务提供方使用的数据结构,hash映射根据函数名能映射到本地对应回调函数,通过addService来增添服务。

request_callback_是请求方使用的数据结构,hash映射根据请求id来调用收到回复的回调函数。

tobe_respond_用于异步回复,键是请求id

Rpc 类中定义了两种回调函数类型:RequestCallback 用于处理收到对端回复的情况,ServiceCallback 用于处理收到对端请求的情况。

构造函数和析构函数用于初始化请求/回复的时间检测。

initialize 方法用于初始化 RPC 实例,设置协议和超时时间。

addService 方法用于添加服务,即指定某个方法被调用时的回调函数。

request 方法用于发送需要对端回复的请求,支持同步和异步方式。底层实际上调用了proto的sendRequest函数。

notify 方法用于发送不需要对端回复的通知。底层实际上调用了proto的sendRequest函数。

respond 方法用于发送异步回复。底层实际上调用了proto的sendResult/sendError函数。

一些私有方法用于处理接收请求、接收回复以及超时情况。

这篇关于cpp-tbox 之 RPC 通信服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936289

相关文章

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

Java通过ServerSocket与Socket实现通信过程

《Java通过ServerSocket与Socket实现通信过程》本文介绍了Java中的ServerSocket和Socket类,详细讲解了它们的构造方法和使用场景,并通过一个简单的通信示例展示了如何... 目录1 ServerSocket2 Socket3 服务器端4 客户端5 运行结果6 设置超时总结1

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe