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

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。