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

相关文章

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

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

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

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

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

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

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

计算机网络基础概念 交换机、路由器、网关、TBOX

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、VLAN是什么?二 、交换机三、路由器四、网关五、TBOXTelematics BOX,简称车载T-BOX,车联网系统包含四部分,主机、车载T-BOX、手机APP及后台系统。主机主要用于车内的影音娱乐,以及车辆信息显示;车载T-BOX主要用于和后台系统/手机APP通信,实现手机APP的车辆信息显示与控

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

Golang服务平滑重启

与重载配置相同的是我们也需要通过信号来通知server重启,但关键在于平滑重启,如果只是简单的重启,只需要kill掉,然后再拉起即可。平滑重启意味着server升级的时候可以不用停止业务。 我们先来看下Github上有没有相应的库解决这个问题,然后找到了如下三个库: facebookgo/grace - Graceful restart & zero downtime deploy for G