CN117215540A - 远程过程调用框架的代码生成方法、装置和系统 - Google Patents

远程过程调用框架的代码生成方法、装置和系统 Download PDF

Info

Publication number
CN117215540A
CN117215540A CN202311283864.4A CN202311283864A CN117215540A CN 117215540 A CN117215540 A CN 117215540A CN 202311283864 A CN202311283864 A CN 202311283864A CN 117215540 A CN117215540 A CN 117215540A
Authority
CN
China
Prior art keywords
function
interface
information
code
serialization
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.)
Pending
Application number
CN202311283864.4A
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.)
Hangzhou Changchuan Technology Co Ltd
Original Assignee
Hangzhou Changchuan 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 Hangzhou Changchuan Technology Co Ltd filed Critical Hangzhou Changchuan Technology Co Ltd
Priority to CN202311283864.4A priority Critical patent/CN117215540A/zh
Publication of CN117215540A publication Critical patent/CN117215540A/zh
Pending legal-status Critical Current

Links

Abstract

本公开实施例公开了一种远程过程调用框架的代码生成方法、装置和系统,其中,该方法包括:将目标程序设计语言的目标接口和所述目标接口依赖的数据结构确定为数据源;解析所述数据源,得到所述数据源的接口函数信息和所述数据结构,并为所述数据结构添加序列化函数;基于所述接口函数信息,对所述目标接口生成序列化代码和反序列化代码,将所述目标接口注册到回调映射表中,并生成提供远程过程调用框架调用所述回调映射表的调用接口。本公开实施例可以降低序列化代码的开发量,极大地降低了代码开发成本。

Description

远程过程调用框架的代码生成方法、装置和系统
技术领域
本公开涉及计算机程序数据领域,尤其是一种远程过程调用框架的代码生成方法、装置和系统。
背景技术
程序设计语言C++的序列化库通常用做取代远程过程调用(Remote ProcedureCall,RPC)中的protobuf的序列化库。其中,protobuf为混合语言数据标准。
C++序列化库在作为RPC的数据交换标准时,通常使用接口类和数据结构定义文件作为C++数据序列化的编码依据,人工编码实现接口的数据序列化代码。对于复杂、反复迭代的系统,序列化代码的开发工作量和维护工作量巨大。
发明内容
本公开实施例提供一种远程过程调用框架的代码生成方法、装置和系统,以解决上述问题。
本公开实施例的第一方面,提供一种远程过程调用框架的代码生成方法,包括:
将目标程序设计语言的目标接口和所述目标接口依赖的数据结构确定为数据源;
解析所述数据源,得到所述数据源的接口函数信息和所述数据结构,并为所述数据结构添加序列化函数,其中,所述接口函数信息包括函数名称、入参信息和返回值信息;
基于所述接口函数信息,对所述目标接口生成序列化代码和反序列化代码,将所述目标接口注册到回调映射表中,并生成提供远程过程调用框架调用所述回调映射表的调用接口。
在本公开的一些实施例中,其中,所述入参信息包括入参类型;
所述为所述数据结构添加序列化函数,包括:
为所述数据结构按照递归的方式添加序列化函数。
在本公开的一些实施例中,其中,所述基于所述接口函数信息,对所述目标接口生成序列化代码和反序列化代码,包括:
基于所述接口函数信息,为每个接口函数生成第一类型终端的类名称、函数声明和入参列表,其中,所述函数声明的入参为第一序列化对象;
基于所述第一序列化对象对所述第一类型终端的入参列表中的每个参数进行反序列化赋值,得到所述第一类型终端赋值后的入参列表,基于所述第一类型终端的入参列表确定所述反序列化代码;
利用所述第一类型终端赋值后的入参列表调用所述数据源的接口,对所述数据源的接口的返回值进行序列化得到所述返回值的序列化对象,并将所述返回值的序列化对象返回到所述远程过程调用框架。
在本公开的一些实施例中,其中,所述基于所述接口函数信息,为每个接口函数生成第一类型终端的类名称、函数声明和入参列表,包括:
基于所述接口函数信息,为每个接口函数生成所述第一类型终端的类名称;
基于每个接口函数的函数名称,为每个接口函数生成第一类型终端的函数声明;
基于所述入参信息,生成所述第一类型终端的入参列表。
在本公开的一些实施例中,其中,所述将所述目标接口注册到回调映射表中,包括:
将所述目标接口、所述函数名称和函数地址添加到所述回调映射表中,并基于所述函数名称确定函数地址。
在本公开的一些实施例中,其中,在所述解析所述数据源,得到所述数据源的接口函数信息和所述数据结构,并为所述数据结构添加序列化函数之后,还包括:
基于所述接口函数信息,生成第二类型终端的类名称和函数声明;
基于所述函数名称和所述入参信息,确定第二序列化对象;
将所述第二序列化对象传入所述远程过程调用框架的目标进程中,并将所述远程过程调用框架返回的第三序列化对象反序列化为返回值信息;
将所述返回值信息返回至所述第二类型终端。
本公开实施例的第二方面,提供一种远程过程调用框架的代码生成装置,包括:
数据源确定模块,用于将目标程序设计语言的目标接口和所述目标接口依赖的数据结构确定为数据源;
接口函数信息处理模块,用于解析所述数据源,得到所述数据源的接口函数信息和所述数据结构,并为所述数据结构添加序列化函数,其中,所述接口函数信息包括函数名称、入参信息和返回值信息;
第一终端处理模块,用于基于所述接口函数信息,对所述目标接口生成序列化代码和反序列化代码,将所述目标接口注册到回调映射表中,并生成提供远程过程调用框架调用所述回调映射表的调用接口。
在本公开的一个实施例中,所述入参信息包括入参类型;所述接口函数信息处理模块用于响应于所述入参类型为递归类型,为所述数据结构按照递归的方式添加序列化函数。
在本公开的一个实施例中,所述第一终端处理模块用于为每个接口函数生成第一类型终端的类名称、函数声明和入参列表,其中,所述函数声明的入参为第一序列化对象;所述第一终端处理模块还用于基于所述第一序列化对象对所述第一类型终端的入参列表中的每个参数进行反序列化赋值,得到所述第一类型终端赋值后的入参列表,基于所述第一类型终端的入参列表确定所述反序列化代码;所述第一终端处理模块还用于利用所述第一类型终端赋值后的入参列表调用所述数据源的接口,对所述数据源的接口的返回值进行序列化得到所述返回值的序列化对象,并将所述返回值的序列化对象返回到所述远程过程调用框架。
在本公开的一个实施例中,所述第一终端处理模块用于基于所述接口函数信息,为每个接口函数生成所述第一类型终端的类名称;所述第一终端处理模块还用于基于每个接口函数的函数名称,为每个接口函数生成第一类型终端的函数声明;所述第一终端处理模块还用于基于所述入参信息,生成所述第一类型终端的入参列表。
在本公开的一个实施例中,远程过程调用框架的代码生成装置,还包括:
第二终端处理模块,用于基于所述接口函数信息,生成第二类型终端的类名称和函数声明;所述第二终端处理模块还用于基于所述函数名称和所述入参信息,确定第二序列化对象;所述第二终端处理模块还用于将所述第二序列化对象传入所述远程过程调用框架的目标进程中,并将所述远程过程调用框架返回的第三序列化对象反序列化为返回值信息;所述第二终端处理模块还用于将所述返回值信息返回至所述第二类型终端。
本公开实施例的第三方面,提供远程过程调用框架的代码生成系统,包括:
上述第二方面的远程过程调用框架的代码生成装置;
代码调用端,用于所述代码生成装置,其中,所述代码调用端包括第一类型终端和第二类型终端中的至少一种。
本公开实施例的第四方面,提供一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现上述第一方面所述的远程过程调用框架的代码生成方法。
本公开实施例的第五方面,提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现上述第一方面所述的远程过程调用框架的处理方法。
本公开实施例的远程过程调用框架的代码生成方法、装置和系统,使用接口类和数据定义作为代码生成装置的数据源。通过解析数据源,获取到接口函数信息。依据序列化规则,为每个接口生成对应的序列化代码和反序列化代码。并将所有的接口注册到回调映射表中,提供给RPC框架访问,从而降低了序列化代码的开发量,极大地降低了代码开发成本。
下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
附图说明
构成说明书的一部分的附图描述了本公开的实施例,并且连同描述一起用于解释本公开的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:
图1为本公开一个实施例中远程过程调用框架的代码生成方法的流程图;
图2为本公开一个实施例中步骤S2的流程图;
图3为本公开一个实施例中步骤S3的流程图;
图4为本公开一个实施例中步骤S4的流程图;
图5为本公开一个实施例中远程过程调用框架的代码生成装置的结构框图;
图6为本公开一个实施例中电子设备的结构框图。
具体实施方式
现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。
还应理解,在本公开实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。
还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。
另外,本公开中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本公开实施例可以应用于终端设备、计算机系统、服务器等电子设备,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与终端设备、计算机系统、服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
终端设备、计算机系统、服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
图1为本公开一个实施例中远程过程调用框架的代码生成方法的流程图。如图1所示,远程过程调用框架的代码生成方法,包括以下步骤:
S1:将目标程序设计语言的目标接口和目标接口依赖的数据结构确定为数据源。
在本公开的实施例中,目标程序设计语言可以是C++语言、Java或其他程序设计语言。将需要注册的目标程序设计语言的目标接口,以及该接口所依赖的数据结构作为代码生成装置的数据源。之后就可以从数据源中调用目标接口以及所依赖的数据结构,为PRC框架生成服务代码。
数据源包括可使用函数的函数名称、入参信息和返回值信息。数据结构包括可使用函数的代码和相关信息。
S2:解析数据源,得到数据源的接口函数信息和数据结构,并为数据结构添加序列化函数。
从数据源中获取函数名称、入参信息和返回值信息。其中,接口函数信息包括函数名称、入参信息和返回值信息。入参信息可以包括入参修饰符、入参类型和入参名称。返回值信息可以包括返回值类型。
S3:基于接口函数信息,对目标接口生成序列化代码和反序列化代码,将目标接口注册到回调映射表中,并生成提供远程过程调用框架调用回调映射表的调用接口。
对目标接口中每个接口,执行以下操作:生成一个与接口对应的函数声明,该函数声明的入参和返回类型均为序列化对象。在该接口进行函数定义时,对该接口所需使用的参数进行反序列化赋值,然后对赋值后的参数调用数据源提供的接口,从而实现为该接口生成数据序列化和反序列化代码。将该接口注册到回调映射表中,提供给PRC框架访问,从而实现了对该接口的自动注册。
在本实施例中,使用接口类和数据定义作为代码生成装置的数据源。通过解析数据源,获取到接口函数信息。依据序列化规则,为每个接口生成对应的序列化代码和反序列化代码。并将所有的接口注册到回调映射表中,提供给RPC框架访问,从而降低了序列化代码的开发量,极大地降低了代码开发成本。
在本公开的一个实施例中,入参信息包括入参类型,则步骤S2可以包括:响应于入参类型为递归类型,为数据结构按照递归的方式添加序列化函数。
图2为本公开一个实施例中步骤S2的流程图。如图2所示,在本公开的一个示例中,当递归类型包括结构体嵌套类型时,步骤S2进一步可以包括:
S2-1:响应于入参类型为结构体嵌套类型,在数据结构中检索目标类型,基于检索结果对目标类型添加第一序列化函数。其中,入参信息包括入参类型。
在利用代码生成装置解析数据源时,如果某个函数的入参类型为结构体嵌套类型,则数据结构中检索与该函数对应的目标类型,并为目标类型添加一个序列化函数,将其定义为第一序列化函数。
S2-2:响应于结构体类型出现目标结构体为嵌套类型,对目标结构体添加第二序列化函数。
在利用代码生成装置解析数据源时,如果结构体类型中出现结构体嵌套类型,则使用递归查找直到检索到未出现为止,为每个目标结构体添加一个序列化函数,将其定义为第二序列化函数。
在本实施例中,对入参类型为结构体嵌套类型以及结构体类型出现目标结构体为嵌套类型时,添加序列化函数,有助于对此类型函数生成数据序列化和反序列化代码,有效降低代码开发成本。
图3为本公开一个实施例中步骤S3的流程图。如图3所示,在本公开的一个实施例中,在步骤S3中,基于接口函数信息,对目标接口生成序列化代码和反序列化代码,可以包括:
S3-1:基于接口函数信息,为每个接口函数生成第一类型终端的类名称、函数声明和入参列表。其中,函数声明的入参为第一序列化对象。
在本公开的一个示例中,第一类型终端包括服务端。在服务端,针对目标接口中的每个接口,根据从数据源中抽取的该接口的函数名称、入参信息和返回值信息可以生成一个特定类名称、一个函数声明和一个入参列表。
S3-2:基于第一序列化对象对第一类型终端的入参列表中的每个参数进行反序列化赋值,得到第一类型终端赋值后的入参列表,基于第一类型终端的入参列表确定反序列化代码。
使用第一序列化对象对第一类型终端的入参列表中的每个参数进行反序列化赋值后,得到第一类型终端赋值后的入参列表。其中,根据第一类型终端的入参列表可以生成反序列化代码。
S3-3:利用第一类型终端赋值后的入参列表调用数据源的接口,对数据源的接口的返回值进行序列化得到返回值的序列化对象,并将返回值的序列化对象返回到远程过程调用框架。序列化为将目标程序设计语言的对象转化为字节序列的过程。反序列化为字节序列转化为目标程序设计语言的对象的过程。
在本实施例中,针对想要注册的目标接口中的每个接口,服务端根据该接口的接口函数信息可以生成一个特定类和一个函数声明,其入参和返回类型均为序列化对象。针对该接口进行函数定义时,根据入参的序列化对象对入参列表进行反序列化赋值,根据入参列表可以生成该接口的反序列化代码。将该接口的返回值进行序列化可以得到序列化代码后,返回到PRC框架,从而可以实现对想要注册的接口进行自动注册,接口注册效率高且有效降低代码开发成本。
在本公开的一个实施例中,步骤S3-1可以包括:基于接口函数信息,为每个接口函数生成所述第一类型终端的类名称;基于每个接口函数的函数名称,为每个接口函数生成第一类型终端的函数声明;基于入参信息,生成第一类型终端的第一参数列表。
针对目标接口中的每个接口,生成适用于第一类型终端的类名称,并根据该接口的函数名称生成适用于第一类型终端的函数声明。针对该函数声明进行函数定义时,基于从数据源抽取的入参信息初始化入参列表。
在本实施例中,针对目标接口中的每个接口,服务端可以根据从数据源获取到该接口的接口函数信息,针对该接口的快速生成适用于第一类型终端的类名称、函数声明和入参列表。
如图3所示,在本公开的一个实施例中,在步骤S3中的将目标接口注册到回调映射表中,可以包括:
S3-4:将目标接口、函数名称和函数地址添加到回调映射表中,并基于函数名称确定函数地址,以便通过函数地址确定目标接口提供的目标函数。
在本实施例中,将目标接口、函数名称和函数地址添加到回调映射表中,并基于函数名称确定为函数地址,当需要使用PRC框架时,可以根据函数名称确定目标函数的函数地址,进而可以根据函数地址快速调取到目标函数。
图4为本公开一个实施例中步骤S4的流程图。如图4所示,在本公开一个实施例中,在步骤S2之后,还可以包括:
S4-1:基于接口函数信息,生成第二类型终端的类名称和函数声明。
在本公开的一个示例中,第二类型终端可以包括接口函数的调用端,调用端可以从客户端调取所需的函数。通常情况下,客户端针对目标接口中的每个接口生成与服务端一致的类名称,并根据从数据源获取到该接口的函数名称、入参信息和返回值类型得到函数声明。在一些情况下,针对同一个函数名称,在客户端对应的类名称可以与服务端的类名称不一致,此时需要保证客户端通过函数名称在回调映射表中可以查找到相应函数的函数地址,进而可以调用相应的函数即可。
S4-2:基于函数名称和入参信息,确定第二序列化对象。
在对该接口进行函数定义时,将函数名称和入参列表按顺序传入一个序列化对象中,生成第二序列化对象。
S4-3:将第二序列化对象传入远程过程调用框架的目标进程中,并将远程过程调用框架返回的第三序列化对象反序列化为返回值信息。其中,该返回值信息可以包括一组参数信息,生成该返回值的目的是准备发送给第二类型终端,以便生成适用于第二类型终端的接口代码。
S4-4:将返回值信息返回至第二类型终端。以便第二类型终端可以通过同样函数签名的函数调用RPC框架提供的远程调用方法,实现了客户端的代码生成。其中,函数签名可以包括函数名称和函数参数,不同的函数签名中的函数参数可以互不相同。
在本实施例中,针对想要注册的目标接口中的每个接口,客户端可以根据该接口的接口函数信息可以生成与服务端相应的类名称和函数声明。针对该接口进行函数定义时,将函数名称和入参列表按顺序传入一个序列化对象中,然后传入PRC框架的目标进程中进行反序列化得到返回值信息,从而使得客户端快速生成与服务端相反逻辑的序列化代码和反序列化代码,有效降低代码开发成本。客户端将返回值信息返回至第二类型终端,有助于第二类型终端通过客户端调取所需的函数。
图5为本公开一个实施例中远程过程调用框架的代码生成装置的结构框图。如图5所示,远程过程调用框架的代码生成装置,包括:
数据源确定模块100,用于将目标程序设计语言的目标接口和目标接口依赖的数据结构确定为数据源;
接口函数信息处理模块200,用于解析数据源和数据结构,得到数据源的接口函数信息,并为数据结构添加序列化函数,其中,接口函数信息包括函数名称、入参信息和返回值信息;
第一终端处理模块300,用于基于接口函数信息,对目标接口生成序列化代码和反序列化代码,将目标接口注册到回调映射表中,并生成提供远程过程调用框架调用回调映射表的调用接口。
在本公开的一个实施例中,入参信息包括入参类型;接口函数信息处理模块200用于响应于入参类型为递归类型,为数据结构按照递归的方式添加序列化函数。
在本公开的一个实施例中,第一终端处理模块300为每个接口函数生成第一类型终端的类名称、函数声明和入参列表,其中,所述函数声明的入参为第一序列化对象;第一终端处理模块300还用于基于所述第一序列化对象对第一类型终端的入参列表中的每个参数进行反序列化赋值,得到第一类型终端赋值后的入参列表,基于第一类型终端的入参列表确定反序列化代码;第一终端处理模块300还用于利用第一类型终端赋值后的入参列表调用数据源的接口,对数据源的接口的返回值进行序列化得到返回值的序列化对象,并将返回值的序列化对象返回到远程过程调用框架。
在本公开的一个实施例中,第一终端处理模块300用于基于接口函数信息,为每个接口函数生成第一类型终端的类名称;第一终端处理模块300还用于基于每个接口函数的函数名称,为每个接口函数生成第一类型终端的函数声明;第一终端处理模块300还用于基于所述入参信息,生成第一类型终端的入参列表。
在本公开的一个实施例中,第一终端处理模块300用于将目标接口、函数名称和函数地址添加到回调映射表中,并基于函数名称确定为函数地址。
在本公开的一个实施例中,远程过程调用框架的代码生成装置,还包括:
第二终端处理模块,用于基于接口函数信息,生成第二类型终端的类名称和函数声明;第二终端处理模块还用于基于函数名称和入参信息,确定第二序列化对象;第二终端处理模块还用于将第二序列化对象传入远程过程调用框架的目标进程中,并将远程过程调用框架返回的第三序列化对象反序列化为返回值信息;第二终端处理模块还用于将返回值信息返回至第二类型终端。
需要说明的是,本公开实施例的远程过程调用框架的代码生成装置的具体实施方式与本公开实施例的远程过程调用框架的代码生成方法的具体实施方式类似,具体参见远程过程调用框架的代码生成方法部分的描述,为了减少冗余,不作赘述。
此外,本公开实施例还提供一种远程过程调用框架的代码生成系统,包括:
上述实施例的远程过程调用框架的代码生成装置;
代码调用端,用于该代码生成装置,其中,该代码调用端包括第一类型终端和第二类型终端中的至少一种。远程过程调用框架的代码生成系统可以利用远程过程调用框架生成序列化代码和反序列化代码。
另外,本公开实施例还提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现本公开上述任一实施例所述的远程过程调用框架的代码生成方法。
图6为本公开一个实施例中电子设备的结构框图。如图6所示,电子设备包括一个或多个处理器和存储器。
处理器可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备中的其他组件以执行期望的功能。
存储器可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器可以运行所述程序指令,以实现上文所述的本公开的各个实施例的远程过程调用框架的代码生成方法以及/或者其他期望的功能。
在一个示例中,电子设备还可以包括:输入装置和输出装置,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
此外,该输入设备还可以包括例如键盘、鼠标等等。
该输出装置可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出设备可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图6中仅示出了该电子设备中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备还可以包括任何其他适当的组件。
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述部分中描述的根据本公开各种实施例的远程过程调用框架的代码生成方法中的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述部分中描述的根据本公开各种实施例的远程过程调用框架的代码生成方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。

Claims (11)

1.一种远程过程调用框架的代码生成方法,包括:
将目标程序设计语言的目标接口和所述目标接口依赖的数据结构确定为数据源;
解析所述数据源,得到所述数据源的接口函数信息和所述数据结构,并为所述数据结构添加序列化函数,其中,所述接口函数信息包括函数名称、入参信息和返回值信息;
基于所述接口函数信息,对所述目标接口生成序列化代码和反序列化代码,将所述目标接口注册到回调映射表中,并生成提供远程过程调用框架调用所述回调映射表的调用接口。
2.根据权利要求1所述的方法,其中,所述入参信息包括入参类型;
所述为所述数据结构添加序列化函数,包括:
响应于所述入参类型为递归类型,为所述数据结构按照递归的方式添加序列化函数。
3.根据权利要求1或2所述的方法,其中,所述基于所述接口函数信息,对所述目标接口生成序列化代码和反序列化代码,包括:
基于所述接口函数信息,为每个接口函数生成第一类型终端的类名称、函数声明和入参列表,其中,所述函数声明的入参为第一序列化对象;
基于所述第一序列化对象对所述第一类型终端的入参列表中的每个参数进行反序列化赋值,得到所述第一类型终端赋值后的入参列表,基于所述第一类型终端的入参列表确定所述反序列化代码;
利用所述第一类型终端赋值后的入参列表调用所述数据源的接口,对所述数据源的接口的返回值进行序列化得到所述返回值的序列化对象,并将所述返回值的序列化对象返回到所述远程过程调用框架。
4.根据权利要求3所述的方法,其中,所述基于所述接口函数信息,为每个接口函数生成第一类型终端的类名称、函数声明和入参列表,包括:
基于所述接口函数信息,为每个接口函数生成所述第一类型终端的类名称;
基于每个接口函数的函数名称,为每个接口函数生成第一类型终端的函数声明;
基于所述入参信息,生成所述第一类型终端的入参列表。
5.根据权利要求1或2所述的方法,其中,所述将所述目标接口注册到回调映射表中,包括:
将所述目标接口、所述函数名称和函数地址添加到所述回调映射表中,并基于所述函数名称确定所述函数地址。
6.根据权利要求3所述的方法,其中,在所述解析所述数据源,得到所述数据源的接口函数信息和所述数据结构,并为所述数据结构添加序列化函数之后,还包括:
基于所述接口函数信息,生成第二类型终端的类名称和函数声明;
基于所述函数名称和所述入参信息,确定第二序列化对象;
将所述第二序列化对象传入所述远程过程调用框架的目标进程中,并将所述远程过程调用框架返回的第三序列化对象反序列化为返回值信息;
将所述返回值信息返回至所述第二类型终端。
7.一种远程过程调用框架的代码生成装置,包括:
数据源确定模块,用于将目标程序设计语言的目标接口和所述目标接口依赖的数据结构确定为数据源;
接口函数信息处理模块,用于解析所述数据源,得到所述数据源的接口函数信息和所述数据结构,并为所述数据结构添加序列化函数,其中,所述接口函数信息包括函数名称、入参信息和返回值信息;
第一终端处理模块,用于基于所述接口函数信息,对所述目标接口生成序列化代码和反序列化代码,将所述目标接口注册到回调映射表中,并生成提供远程过程调用框架调用所述回调映射表的调用接口,以及将所述序列化函数添加到所述数据结构中。
8.根据权利要求7所述的装置,其中,还包括:
第二终端处理模块,用于基于所述接口函数信息,生成第二类型终端的类名称和函数声明;所述第二终端处理模块还用于基于所述函数名称和所述入参信息,确定第二序列化对象;所述第二终端处理模块还用于将所述第二序列化对象传入所述远程过程调用框架的目标进程中,并将所述远程过程调用框架返回的第三序列化对象反序列化为返回值信息;所述第二终端处理模块还用于将所述返回值信息返回至所述第二类型终端。
9.一种远程过程调用框架的代码生成系统,包括:
权利要求7或8所述的远程过程调用框架的代码生成装置;
代码调用端,用于所述代码生成装置,其中,所述代码调用端包括第一类型终端和第二类型终端中的至少一种。
10.一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现上述权利要求1-6任一所述的远程过程调用框架的代码生成方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现上述权利要求1-6任一所述的远程过程调用框架的代码生成方法。
CN202311283864.4A 2023-09-28 2023-09-28 远程过程调用框架的代码生成方法、装置和系统 Pending CN117215540A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311283864.4A CN117215540A (zh) 2023-09-28 2023-09-28 远程过程调用框架的代码生成方法、装置和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311283864.4A CN117215540A (zh) 2023-09-28 2023-09-28 远程过程调用框架的代码生成方法、装置和系统

Publications (1)

Publication Number Publication Date
CN117215540A true CN117215540A (zh) 2023-12-12

Family

ID=89040567

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311283864.4A Pending CN117215540A (zh) 2023-09-28 2023-09-28 远程过程调用框架的代码生成方法、装置和系统

Country Status (1)

Country Link
CN (1) CN117215540A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117472336A (zh) * 2023-12-28 2024-01-30 芯瞳半导体技术(山东)有限公司 基于程序api的代码生成装置及其方法、设备及介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117472336A (zh) * 2023-12-28 2024-01-30 芯瞳半导体技术(山东)有限公司 基于程序api的代码生成装置及其方法、设备及介质
CN117472336B (zh) * 2023-12-28 2024-04-12 芯瞳半导体技术(山东)有限公司 基于程序api的代码生成装置及其方法、设备及介质

Similar Documents

Publication Publication Date Title
CN117215540A (zh) 远程过程调用框架的代码生成方法、装置和系统
CN114528044B (zh) 一种接口调用方法、装置、设备及介质
CN111143446A (zh) 数据对象的数据结构转换处理方法、装置及电子设备
CN110858202A (zh) 数据库查询语句中where子句的生成方法和生成装置
CN111814449B (zh) 表单解析方法、装置、设备及存储介质
US20240004778A1 (en) Method for processing command, device for processing command, and electronic device
CN110941655B (zh) 一种数据格式转换方法及装置
CA3203549A1 (en) Unified verification method, device, equipment and storage medium
CN111427630B (zh) 冷启动优化方法和装置、电子设备和存储介质
CN110765003B (zh) 代码检测方法、装置以及设备、存储介质
CN110659062B (zh) 前端脚手架的配置方法和装置、可读存储介质、电子设备
CN112650502A (zh) 批处理任务处理方法、装置、计算机设备和存储介质
CN111078230A (zh) 一种代码生成方法和装置
US20130238669A1 (en) Using Target Columns in Data Transformation
CN116010438B (zh) 一种数据库操作延迟计算的方法和系统
CN113434147B (zh) 基于ProtoBuf协议的消息解析方法及装置
CN111782183B (zh) 用于判断组件依赖关系的方法及设备、电子设备和介质
CN111625605B (zh) 信息同步方法和装置、以及存储介质和电子设备
CN111562909B (zh) 基于类的应用实现方法和装置、电子设备和存储介质
JP2002287961A (ja) 業務アプリケーション開発システム及び方法
CN112162738B (zh) 数据转化方法、装置、终端设备及存储介质
CN116578799A (zh) 一种小程序与第三方平台关联的实现方法、装置及介质
US20210224295A1 (en) Hierarchical data
CN110069514B (zh) 消息处理方法和装置
JP3260704B2 (ja) プログラム変換方法

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