CN113835904A - 一种远程过程调用控制方法、装置、设备及存储介质 - Google Patents

一种远程过程调用控制方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN113835904A
CN113835904A CN202111137847.0A CN202111137847A CN113835904A CN 113835904 A CN113835904 A CN 113835904A CN 202111137847 A CN202111137847 A CN 202111137847A CN 113835904 A CN113835904 A CN 113835904A
Authority
CN
China
Prior art keywords
data
procedure call
remote procedure
information
data packet
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
CN202111137847.0A
Other languages
English (en)
Inventor
黄炎
张璐
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202111137847.0A priority Critical patent/CN113835904A/zh
Publication of CN113835904A publication Critical patent/CN113835904A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/133Protocols for remote procedure calls [RPC]

Abstract

本申请公开了一种远程过程调用控制方法、装置、设备及存储介质,通过预先编写信息注册脚本实现对数据类型推导逻辑、结构体成员信息生成逻辑、结构体成员信息识别逻辑、数据类型与数据处理函数的对应关系、远程回调函数等结构体信息的注册,其中结构体成员信息至少包括数据类型和对象偏移量,数据处理函数包括序列化函数和反序列化函数,解决了C语言等语言不带有反射语义、类型推导、函数重载等机制的问题,从而无需依赖于C++、java等语言的高级特性,在C语言等语言的开发环境中实现了远程过程调用方案,弥补了现有远程过程调用方案的不足。

Description

一种远程过程调用控制方法、装置、设备及存储介质
技术领域
本申请涉及通信技术领域,特别是涉及一种远程过程调用控制方法、装置、设备及存储介质。
背景技术
远程过程调用(Remote Procedure Call,RPC)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。远程过程调用协议假定某些传输协议的存在,如传输控制协议(Transmission Control Protocol,TCP)或用户数据报协议(UserDatagram Protocol,UDP),为通信程序之间携带信息数据。在开放式系统互联(OpenSystem Interconnection,OSI)网络通信模型中,远程过程调用协议跨越了传输层和应用层,使得开发包括网络分布式多程序在内的应用程序更加容易。
对于现代计算机网络系统来说,远程过程调用模块是一种有效的开发工具。在较为传统的网络开发环境下,开发人员需要考虑各种实现问题,如网络字节序,错误处理,发送接收接口,自有帧头结构,针对每个不同需求设置不同接口,实现复杂,调试困难,代码难读难写,是一种很低效的开发方式。而在使用远程过程调用模块的情况下,系统开发人员不必再考虑麻烦的网络封装实现、发送接收逻辑、进程线程调度等细枝末节,可以将精力集中于系统逻辑的实现,增加开发效率。
然而,由于目前的远程过程调用模块均为C++、java等高级语言实现,这在如不带有反射语义、类型推导、函数重载等机制的C语言开发环境下限制很大,对其他语言的额外依赖可能会影响项目的运行与部署。
提供一种适用于C语言等语言的开发环境的远程过程调用方案,是本领域技术人员需要解决的技术问题。
发明内容
本申请的目的是提供一种远程过程调用控制方法、装置、设备及存储介质,不再依赖于C++、java等语言的高级特性,能够很好地适用于C语言等语言的开发环境。
为解决上述技术问题,本申请提供一种远程过程调用控制方法,包括:
调用预设的信息注册脚本,注册结构体信息;
在执行第一远程过程调用任务时,根据所述结构体信息,将第一传入参数生成第一结构体,对所述第一结构体进行序列化处理,生成第一数据包,将所述第一数据包发送至所述第一远程过程调用任务的接收端;
当接收到第二数据包后,根据所述结构体信息,对所述第二数据包进行反序列化处理,得到第二结构体,根据所述第二结构体得到第二传入参数,以根据所述第二传入参数执行第二远程过程调用任务;
其中,所述结构体信息包括:数据类型推导逻辑、结构体成员信息生成逻辑、结构体成员信息识别逻辑、数据类型与数据处理函数的对应关系、远程回调函数;结构体成员信息至少包括所述数据类型和对象偏移量;所述数据处理函数包括序列化函数和反序列化函数。
可选的,所述数据类型推导逻辑具体为GNU编译器套件中用于进行类型一致性判断的扩展函数。
可选的,所述数据类型具体为:字符型数据、整数型数据、短整型数据、长整型数据、浮点型数据、双精度浮点型数据中的至少一种。
可选的,所述根据所述结构体信息,将第一传入参数生成第一结构体,对所述第一结构体进行序列化处理,生成第一数据包,具体包括:
调用所述数据类型推导逻辑检测得到所述第一传入参数对应的数据类型;
根据所述结构体成员信息生成逻辑,将所述第一结构体的唯一标识、所述第一传入参数对应的数据类型和所述第一传入参数对应的对象偏移量写入结构体头结构中,生成所述第一结构体;
根据所述对应关系和所述第一传入参数对应的数据类型调用对应的序列化函数对所述第一结构体进行序列化处理,得到所述第一数据包。
可选的,所述根据所述结构体信息,对所述第二数据包进行反序列化处理,得到第二结构体,具体包括:
根据所述结构体成员信息识别逻辑识别得到所述第二数据包中的结构体成员信息;
调用所述数据类型推导逻辑检测得到所述第二数据包中的结构体成员信息的数据类型;
根据所述对应关系和所述第二数据包中的结构体成员信息的数据类型调用对应的反序列化函数对所述第二数据包进行反序列化处理,得到所述第二结构体。
可选的,所述将所述第一数据包发送至接收端,具体为:
基于KCP协议,根据所述接收端的通信协议类型配置对所述第一数据包的通信协议后,将所述第一数据包发送至所述接收端。
可选的,所述执行第一远程过程调用任务,具体为:采用协程模式执行所述第一远程过程调用任务;
所述执行第二远程过程调用任务,具体为:采用协程模式执行所述第二远程过程调用任务。
为解决上述技术问题,本申请还提供一种远程过程调用控制装置,包括:
注册单元,用于调用预设的信息注册脚本,注册结构体信息;
发送单元,用于在执行第一远程过程调用任务时,根据所述结构体信息,将第一传入参数生成第一结构体,对所述第一结构体进行序列化处理,生成第一数据包,将所述第一数据包发送至所述第一远程过程调用任务的接收端;
接收单元,用于当接收到第二数据包后,根据所述结构体信息,对所述第二数据包进行反序列化处理,得到第二结构体,根据所述第二结构体得到第二传入参数,以根据所述第二传入参数执行第二远程过程调用任务;
其中,所述结构体信息包括:数据类型推导逻辑、结构体成员信息生成逻辑、结构体成员信息识别逻辑、数据类型与数据处理函数的对应关系、远程回调函数;结构体成员信息至少包括所述数据类型和对象偏移量;所述数据处理函数包括序列化函数和反序列化函数。
为解决上述技术问题,本申请还提供一种远程过程调用控制设备,包括:
存储器,用于存储指令,所述指令包括上述任意一项所述远程过程调用控制方法的步骤;
处理器,用于执行所述指令。
为解决上述技术问题,本申请还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意一项所述远程过程调用控制方法的步骤。
本申请所提供的远程过程调用控制方法,通过预先编写信息注册脚本实现对数据类型推导逻辑、结构体成员信息生成逻辑、结构体成员信息识别逻辑、数据类型与数据处理函数的对应关系、远程回调函数等结构体信息的注册,其中结构体成员信息至少包括数据类型和对象偏移量,数据处理函数包括序列化函数和反序列化函数,解决了C语言等语言不带有反射语义、类型推导、函数重载等机制的问题,调用信息注册脚本注册结构体信息后,即可在执行远程过程调用任务时根据结构体信息进行数据类型识别、成员信息写入及识别、以及结构体的序列化处理与反序列化处理,从而无需依赖于C++、java等语言的高级特性,在C语言等语言的开发环境中实现了远程过程调用方案,弥补了现有远程过程调用方案的不足。
本申请还提供一种远程过程调用控制装置、设备及存储介质,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚的说明本申请实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种远程过程调用控制方法的流程图;
图2为本申请实施例提供的一种远程过程调用控制装置的结构示意图;
图3为本申请实施例提供的一种远程过程调用控制设备的结构示意图。
具体实施方式
本申请的核心是提供一种远程过程调用控制方法、装置、设备及存储介质,不再依赖于C++、java等语言的高级特性,能够很好地适用于C语言等语言的开发环境。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种远程过程调用控制方法的流程图。
如图1所示,本申请实施例提供的远程过程调用控制方法包括:
S101:调用预设的信息注册脚本,注册结构体信息。
其中,结构体信息包括:数据类型推导逻辑、结构体成员信息生成逻辑、结构体成员信息识别逻辑、数据类型与数据处理函数的对应关系、远程回调函数;结构体成员信息至少包括数据类型和对象偏移量;数据处理函数包括序列化函数和反序列化函数。
S102:在执行第一远程过程调用任务时,根据结构体信息,将第一传入参数生成第一结构体,对第一结构体进行序列化处理,生成第一数据包,将第一数据包发送至第一远程过程调用任务的接收端。
S103:当接收到第二数据包后,根据结构体信息,对第二数据包进行反序列化处理,得到第二结构体,根据第二结构体得到第二传入参数,以根据第二传入参数执行第二远程过程调用任务。
需要说明的是,执行步骤S101是执行步骤S102、S103的前提;步骤S102、S103之间无顺序关系,分别为执行主体作为发送端和作为接收端所执行的步骤。
对于步骤S101来说,在执行远程过程调用任务之前,需要发送端上对要传输的结构体的序列化处理方式进行注册,在接收端上对要接收的结构体的反序列化处理方式进行注册,对于集群中所有既可能作为发送端又可能作为接收端的服务器节点,需要预先注册对不同数据类型的序列化处理方式和反序列化处理方式。
C++的结构体可以包含函数,这样,C++的结构体也具有类的功能,然而在C语言中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。即C语言无反射、类型推导功能,无法实现对数据类型的推导以及对结构体成员信息进行识别。本申请实施例提供的远程过程调用控制方法为实现基于C语言等无反射、类型推导功能的语言实现不依赖高级语言的远程过程调用功能,预先编写信息注册脚本以注册结构体信息,要注册的结构体信息至少包括:数据类型推导逻辑、结构体成员信息生成逻辑、结构体成员信息识别逻辑、数据类型与数据处理函数的对应关系、远程回调函数;结构体成员信息至少包括数据类型和对象偏移量,数据处理函数包括序列化函数和反序列化函数,即在C语言环境下实现远程过程调用中所需的类型推导和反射功能。
其中,数据类型推导逻辑用于解决原本C语言不具有类型推导功能的问题,即根据传入参数的类型判断两种类型是否一致,从而确定数据类型。具体的,数据类型推导逻辑可以采用GNU编译器套件中用于进行类型一致性判断的扩展函数_builtin_types_compatible_p,该扩展函数可以根据传入参数判断两种类型是否一致,由此,我们可以使用这种机制实现语言类型推导。
具体的,可以给不同的数据类型设置唯一的标识,即与数据类型一一对应的数据类型标识,例如:#define INT32_TYPE_ID 1。预先准备的数据类型可以包括字符型数据(char)、整数型数据(int)、短整型数据(short)、长整型数据(long)、浮点型数据(float)和双精度浮点型数据(double)。对应结构体中的数据类型则具体为字符型数据、整数型数据、短整型数据、长整型数据、浮点型数据、双精度浮点型数据中的至少一种。
然后,根据不同的数据类型,设计对应的序列化函数和反序列化函数。
例如:
Figure BDA0003282743180000061
其中,write/read函数是针对该数据类型的序列化函数/反序列化函数。
在通过扩展函数_builtin_types_compatible_p识别到数据类型的数据类型标识后,即根据预先注册的数据类型与数据处理函数的对应关系调用对应的序列化函数/反序列化函数。
结构体成员信息生成逻辑和结构体成员信息识别逻辑是相反的实现过程。对于C语言无反射功能,需要在结构体中添加用于标记数据类型与对象偏移量等信息的结构,实现侵入式反射功能。则预先编写结构体成员信息生成逻辑在结构体的预定位置添加结构体的数据类型和对象偏移量等成员信息,用于标识结构体所包含成员的数据类型和数据在内存中的偏移量。预先编写结构体成员信息识别逻辑在结构体的预定位置识别成员信息,再利用数据类型推导逻辑识别得到成员信息中的数据类型,以便进行数据反序列化。
通常在对需要序列化的数据组织为结构体时,需要在结构体头部添加宏RPC_HEADER。该宏包含结构体序列化的所需信息,如结构体的ID信息等。为方便成员信息识别,可以在结构体头结构中添加特殊头结构用于标记数据类型与对象偏移量等成员信息,则可以生成如下所示的结构体头结构:
Figure BDA0003282743180000071
在该信息体中,描述了该结构体的唯一ID(type_id)、成员类型(int type)与对象偏移量。其中,对于等待序列化/反序列化的结构体来说,需要一个特殊结构体描述其成员信息,以便进行下一步操作,这个描述结构体信息的结构体称为信息体。
此外,还需要注册结构体的远程回调函数,用于触发接收端在接收到结构体后向发送端回调处理结果。
至此,在发送端节点和接收端节点完成上述结构体信息的注册后,发送、接收信息的序列化与反序列化逻辑就完成了。
则对于步骤S102来说,当作为发送端执行第一远程过程调用任务时,根据预先注册的结构体信息,即可将第一传入参数生成第一结构体,对第一结构体进行序列化处理,封装为第一数据包后,将第一数据包发送至第一远程过程调用任务的接收端,以实现对接收端的远程过程调用。
步骤S102具体可以包括:
调用数据类型推导逻辑检测得到第一传入参数对应的数据类型;
根据结构体成员信息生成逻辑,将第一结构体的唯一标识、第一传入参数对应的数据类型和第一传入参数对应的对象偏移量写入结构体头结构中,生成第一结构体;
根据对应关系和第一传入参数对应的数据类型调用对应的序列化函数对第一结构体进行序列化处理,得到第一数据包。
其中,第一结构体的唯一标识即指第一结构体的ID信息。
对于步骤S103来说,当接收到第二数据包、作为被调用方时,则根据预先注册的结构体信息,对第二数据包进行反序列化处理,得到第二结构体,再从第二结构体中识别得到第二传入参数,从而根据第二传入参数执行第二远程过程调用任务。
步骤S103具体可以包括:
根据结构体成员信息识别逻辑识别得到第二数据包中的结构体成员信息;
调用数据类型推导逻辑检测得到第二数据包中的结构体成员信息的数据类型;
根据对应关系和第二数据包中的结构体成员信息的数据类型调用对应的反序列化函数对第二数据包进行反序列化处理,得到第二结构体。
本申请实施例提供的远程过程调用控制方法,通过预先编写信息注册脚本实现对数据类型推导逻辑、结构体成员信息生成逻辑、结构体成员信息识别逻辑、数据类型与数据处理函数的对应关系、远程回调函数等结构体信息的注册,其中结构体成员信息至少包括数据类型和对象偏移量,数据处理函数包括序列化函数和反序列化函数,解决了C语言等语言不带有反射语义、类型推导、函数重载等机制的问题,调用信息注册脚本注册结构体信息后,即可在执行远程过程调用任务时根据结构体信息进行数据类型识别、成员信息写入及识别、以及结构体的序列化处理与反序列化处理,从而无需依赖于C++、java等语言的高级特性,在C语言等语言的开发环境中实现了远程过程调用方案,弥补了现有远程过程调用方案的不足。
实施例二
传统的远程过程调用模块大都基于传输控制协议(TransmissionControlProtocol,TCP)或用户数据报协议(UserDatagramProtocol,UDP)进行通信,优点是适用范围广,基础设施全面,但对于一些特殊环境如光纤(FC)网络支持不足。
故在上述实施例的基础上,在本申请实施例提供的远程过程调用控制方法中,步骤S102中将第一数据包发送至接收端,具体为:
基于KCP协议,根据接收端的通信协议类型配置对第一数据包的通信协议后,将第一数据包发送至接收端。
在发送端,使用KCP协议,通过自定义的帧封装机制处理数据逻辑,避免了传统远程过程调用模块实现TCP/UDP外其他协议的困难。同时,由于KCP协议的实现均为用户态实现,对功能进行适配不需要调整系统配置,适配其他传输网络的工作也比较简单。
在具体实施中,每发起一次远程过程调用,首先需要由用户本身组装发送结构体信息。其中,发送结构体应当在本申请实施例一中的信息体中注册。执行序列化操作时,用户结构体会填充回调函数编号、线程调用编号、锁编号等所需的数据信息,然后将其序列化为字符型数据。
而后,字符型数据将通过KCP协议应用层接口输入发送/接收模块,在此填充网络帧,顺序号,响应请求等数据,并拆分成合理的大小,然后通过物理发送接口发送到服务端。在这个过程中,由于使用纯应用层协议KCP,我们可以灵活地调度发送/接收接口,包括但不限于TCP/UDP/FC等数据格式,摆脱了过去远程过程调用协议多基于TCP/IP协议的局限性。
接收端(服务端)将接收到的数据帧信息组装为数据流,通过KCP服务接收接口完成数据的合法性校验、排序、拆解包等工作,然后进入调度过程。
实施例三
由于传统远程过程调用模块作为网络的开发中心,通常都实现了一套自己的进程调度算法,以实现平衡高效的网络处理。但在一些特殊情况下,网络开发中需要自己的进程调度算法,以避免额外的进程调度开销。这种情况下,传统远程过程调用模块的修改难度很大,也更容易出现异常错误。本申请实施例一实现了一种基于C语言的远程过程调用模块,为实现自己的进程调度算法提供了基础。在此基础上,在本申请实施例提供的远程过程调用控制方法中,步骤S102中执行第一远程过程调用任务,具体为:采用协程模式执行第一远程过程调用任务。步骤S103中执行第二远程过程调用任务,具体为:采用协程模式执行第二远程过程调用任务。
对于系统调度过程,传统远程过程调用模块使用的是线程/线程池模式,调度大都由一个接收线程使用多路复用技术处理输入输出(IO)请求,然后分配不同的线程或线程池对象处理逻辑,优点是实现简单,缺点是对于用户来说调度过程是完全不可见的,且在限制较大的环境中,线程池可能会运行困难。在本申请实施例中,任务调度采用协程(coroutine)模式,避免线程切换与数据锁的执行逻辑,由程序自身负责调度帧发送/接收过程,同时调度处理逻辑。这样的优势是可以避免无谓的进程切换,而进程切换开销在高并发程序中是不可接受的。同时,由于可以主动调度运行,程序可以精心设计后将需要并发的数据置于同一物理线程中执行,避免了锁的实现,也减少了cpu cache miss(中央处理器缓存未命中)概率,提升了运行效率。
在具体实施中,在发送端(客户端)发送远程过程调用请求时,接哦固体的RPC_HEADER字段中保存着调度请求数据,由调度请求数据指定在服务端的某个或某些线程编号执行。在这个过程中,客户端可以根据调度相同的线程编号,保证可能有数据冲突的逻辑免锁运行,或者某些上下无关的请求能根据负载平均分配到多核当中执行。
在环境中,每个核心对应一个固有线程,固有线程中存在一个无锁数据队列,存放着由KCP协议获取的任务对象信息。在每个核心的固有线程中运行一个循环,该循环会遍历这个无锁数据队列,并根据RPC_HEADER中注册的结构体ID对应的回调函数调度数据调度实际任务函数,并获取返回值。获取返回值后,将返回值数据与命令ID写入KCP返回信息当中,由KCP协议自己负责向客户端发送响应逻辑。
上文详述了远程过程调用控制方法对应的各个实施例,在此基础上,本申请还公开了与上述方法对应的远程过程调用控制装置、设备及存储介质。
实施例四
图2为本申请实施例提供的一种远程过程调用控制装置的结构示意图。
如图2所示,本申请实施例提供的远程过程调用控制装置包括:
注册单元201,用于调用预设的信息注册脚本,注册结构体信息;
发送单元202,用于在执行第一远程过程调用任务时,根据结构体信息,将第一传入参数生成第一结构体,对第一结构体进行序列化处理,生成第一数据包,将第一数据包发送至第一远程过程调用任务的接收端;
接收单元203,用于当接收到第二数据包后,根据结构体信息,对第二数据包进行反序列化处理,得到第二结构体,根据第二结构体得到第二传入参数,以根据第二传入参数执行第二远程过程调用任务;
其中,结构体信息包括:数据类型推导逻辑、结构体成员信息生成逻辑、结构体成员信息识别逻辑、数据类型与数据处理函数的对应关系、远程回调函数;结构体成员信息至少包括数据类型和对象偏移量;数据处理函数包括序列化函数和反序列化函数。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
实施例五
图3为本申请实施例提供的一种远程过程调用控制设备的结构示意图。
如图3所示,本申请实施例提供的远程过程调用控制设备包括:
存储器310,用于存储指令,所述指令包括上述任意一项实施例所述的远程过程调用控制方法的步骤;
处理器320,用于执行所述指令。
其中,处理器320可以包括一个或多个处理核心,比如3核心处理器、8核心处理器等。处理器320可以采用数字信号处理DSP(Digital Signal Processing)、现场可编程门阵列FPGA(Field-Programmable Gate Array)、可编程逻辑阵列PLA(Programmable LogicArray)中的至少一种硬件形式来实现。处理器320也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器CPU(CentralProcessing Unit);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器320可以集成有图像处理器GPU(Graphics Processing Unit),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器320还可以包括人工智能AI(Artificial Intelligence)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器310可以包括一个或多个存储介质,该存储介质可以是非暂态的。存储器310还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器310至少用于存储以下计算机程序311,其中,该计算机程序311被处理器320加载并执行之后,能够实现前述任一实施例公开的远程过程调用控制方法中的相关步骤。另外,存储器310所存储的资源还可以包括操作系统312和数据313等,存储方式可以是短暂存储或者永久存储。其中,操作系统312可以为Windows。数据313可以包括但不限于上述方法所涉及到的数据。
在一些实施例中,远程过程调用控制设备还可包括有显示屏330、电源340、通信接口350、输入输出接口360、传感器370以及通信总线380。
本领域技术人员可以理解,图3中示出的结构并不构成对远程过程调用控制设备的限定,可以包括比图示更多或更少的组件。
本申请实施例提供的远程过程调用控制设备,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如上所述的远程过程调用控制方法,效果同上。
实施例六
需要说明的是,以上所描述的装置、设备实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本申请各个实施例所述方法的全部或部分步骤。
为此,本申请实施例还提供一种存储介质,该存储介质上存储有计算机程序,计算机程序被处理器执行时实现如远程过程调用控制方法的步骤。
该存储介质可以包括:U盘、移动硬盘、只读存储器ROM(Read-Only Memory)、随机存取存储器RAM(Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例中提供的存储介质所包含的计算机程序能够在被处理器执行时实现如上所述的远程过程调用控制方法的步骤,效果同上。
以上对本申请所提供的一种远程过程调用控制方法、装置、设备及存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、设备及存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (10)

1.一种远程过程调用控制方法,其特征在于,包括:
调用预设的信息注册脚本,注册结构体信息;
在执行第一远程过程调用任务时,根据所述结构体信息,将第一传入参数生成第一结构体,对所述第一结构体进行序列化处理,生成第一数据包,将所述第一数据包发送至所述第一远程过程调用任务的接收端;
当接收到第二数据包后,根据所述结构体信息,对所述第二数据包进行反序列化处理,得到第二结构体,根据所述第二结构体得到第二传入参数,以根据所述第二传入参数执行第二远程过程调用任务;
其中,所述结构体信息包括:数据类型推导逻辑、结构体成员信息生成逻辑、结构体成员信息识别逻辑、数据类型与数据处理函数的对应关系、远程回调函数;结构体成员信息至少包括所述数据类型和对象偏移量;所述数据处理函数包括序列化函数和反序列化函数。
2.根据权利要求1所述的远程过程调用控制方法,其特征在于,所述数据类型推导逻辑具体为GNU编译器套件中用于进行类型一致性判断的扩展函数。
3.根据权利要求1所述的远程过程调用控制方法,其特征在于,所述数据类型具体为:字符型数据、整数型数据、短整型数据、长整型数据、浮点型数据、双精度浮点型数据中的至少一种。
4.根据权利要求1所述的远程过程调用控制方法,其特征在于,所述根据所述结构体信息,将第一传入参数生成第一结构体,对所述第一结构体进行序列化处理,生成第一数据包,具体包括:
调用所述数据类型推导逻辑检测得到所述第一传入参数对应的数据类型;
根据所述结构体成员信息生成逻辑,将所述第一结构体的唯一标识、所述第一传入参数对应的数据类型和所述第一传入参数对应的对象偏移量写入结构体头结构中,生成所述第一结构体;
根据所述对应关系和所述第一传入参数对应的数据类型调用对应的序列化函数对所述第一结构体进行序列化处理,得到所述第一数据包。
5.根据权利要求1所述的远程过程调用控制方法,其特征在于,所述根据所述结构体信息,对所述第二数据包进行反序列化处理,得到第二结构体,具体包括:
根据所述结构体成员信息识别逻辑识别得到所述第二数据包中的结构体成员信息;
调用所述数据类型推导逻辑检测得到所述第二数据包中的结构体成员信息的数据类型;
根据所述对应关系和所述第二数据包中的结构体成员信息的数据类型调用对应的反序列化函数对所述第二数据包进行反序列化处理,得到所述第二结构体。
6.根据权利要求1所述的远程过程调用控制方法,其特征在于,所述将所述第一数据包发送至接收端,具体为:
基于KCP协议,根据所述接收端的通信协议类型配置对所述第一数据包的通信协议后,将所述第一数据包发送至所述接收端。
7.根据权利要求1所述的远程过程调用控制方法,其特征在于,所述执行第一远程过程调用任务,具体为:采用协程模式执行所述第一远程过程调用任务;
所述执行第二远程过程调用任务,具体为:采用协程模式执行所述第二远程过程调用任务。
8.一种远程过程调用控制装置,其特征在于,包括:
注册单元,用于调用预设的信息注册脚本,注册结构体信息;
发送单元,用于在执行第一远程过程调用任务时,根据所述结构体信息,将第一传入参数生成第一结构体,对所述第一结构体进行序列化处理,生成第一数据包,将所述第一数据包发送至所述第一远程过程调用任务的接收端;
接收单元,用于当接收到第二数据包后,根据所述结构体信息,对所述第二数据包进行反序列化处理,得到第二结构体,根据所述第二结构体得到第二传入参数,以根据所述第二传入参数执行第二远程过程调用任务;
其中,所述结构体信息包括:数据类型推导逻辑、结构体成员信息生成逻辑、结构体成员信息识别逻辑、数据类型与数据处理函数的对应关系、远程回调函数;结构体成员信息至少包括所述数据类型和对象偏移量;所述数据处理函数包括序列化函数和反序列化函数。
9.一种远程过程调用控制设备,其特征在于,包括:
存储器,用于存储指令,所述指令包括权利要求1至7任意一项所述远程过程调用控制方法的步骤;
处理器,用于执行所述指令。
10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任意一项所述远程过程调用控制方法的步骤。
CN202111137847.0A 2021-09-27 2021-09-27 一种远程过程调用控制方法、装置、设备及存储介质 Withdrawn CN113835904A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111137847.0A CN113835904A (zh) 2021-09-27 2021-09-27 一种远程过程调用控制方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111137847.0A CN113835904A (zh) 2021-09-27 2021-09-27 一种远程过程调用控制方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN113835904A true CN113835904A (zh) 2021-12-24

Family

ID=78970945

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111137847.0A Withdrawn CN113835904A (zh) 2021-09-27 2021-09-27 一种远程过程调用控制方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN113835904A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114679493A (zh) * 2022-03-23 2022-06-28 北京睿芯高通量科技有限公司 一种安全的序列化和反序列化传输数据的方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114679493A (zh) * 2022-03-23 2022-06-28 北京睿芯高通量科技有限公司 一种安全的序列化和反序列化传输数据的方法

Similar Documents

Publication Publication Date Title
CN111176626B (zh) 跨编程语言的代码调用方法及装置、介质、设备
CN111930365B (zh) 基于Qt的应用程序快速开发框架、开发方法及运行方法
CN110716748A (zh) 业务处理方法、装置、计算机可读介质及电子设备
EP0924617A2 (en) Method and apparatus for executing code during method invocation
CN105975261B (zh) 一种面向统一接口调用的运行时系统及运行方法
CN114756357B (zh) 一种基于jvm的非阻塞分布式计划任务调度方法
CN110457132B (zh) 一种功能对象的创建方法、装置和终端设备
CN113448655B (zh) C标准动态库的调用方法与装置
CN113835904A (zh) 一种远程过程调用控制方法、装置、设备及存储介质
CN108833005B (zh) 光网络通信设备及其组网业务的自动化测试工具包及方法
CN113485840A (zh) 基于Go语言的多任务并行处理装置及方法
CN112817539A (zh) 一种工业数据存储方法、系统、电子设备及存储介质
JP3881704B2 (ja) クライアント側スタブインタプリタ
CN107483399B (zh) 一种在远程过程调用中的信息封装方法及装置
CN109669793B (zh) 中间件进程内对象调用方法
CN112306718B (zh) 一种本地设备与异构设备之间的通信方法、系统及相关装置
CN114490318A (zh) 一种基于字节码增强实现弱隔离的环境治理系统及方法
CN107911442A (zh) 接收响应接口交互方法、装置、计算机设备及存储介质
CN113849449A (zh) 一种通信系统和信息交互方法、设备和介质
CN113312031A (zh) 一种软件通信体系结构的命名服务接口
CN109597611B (zh) 前端数据流控制组件开发系统、方法、设备及存储介质
Scherfke Mosaik documentation
CN115878711B (zh) 一种Redis连接池的实现方法、装置、设备及介质
CN103246517A (zh) 一种智能客户端程序调用webservice实现数据库事务持续化的方法
US20230376236A1 (en) Systems and methods for client-server connection abstraction in a server computing environment

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication

Application publication date: 20211224

WW01 Invention patent application withdrawn after publication