一种区块链的远端程序调用方法及服务端与流程

专利2023-05-20  142



1.本发明涉及区块链技术领域,特别涉及一种区块链的远端程序调用方法及服务端。


背景技术:

2.请参照图3,远端程序调用(remote procedure call,rpc)是一个计算机通信协议,该协议允许运行于一台计算机的程序调用另一个地址空间的子程序,另一个地址空间通常为一个开放网络的一台计算机,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程。
3.rpc是一种服务器-客户端(client/server)模式,通常是一个通过发送请求-接受回应进行信息交互的系统,而在区块链网络中,rpc作为通信的基础协议,对性能有着至关重要的作用。
4.目前,rpc请求头采用service与method组合的字符串形式,那么请求头的长度将与设计服务的程序工程师息息相关。若服务设计不规范,即服务名或方法名过长,将占用过多的网络传输字节。当服务端收到请求头时,需要解析service与method组合的字符串,解析的过程将消耗性能,然后获得其中的service与method信息,然后调用对应的服务方法。
5.由此可见,现有rpc的头部设计在网络传输的带宽方面还存有缺陷。


技术实现要素:

6.本发明所要解决的技术问题是:提供一种区块链的远端程序调用方法及服务端,能够减少网络传输中的带宽消耗。
7.为了解决上述技术问题,本发明采用的技术方案为:
8.一种区块链的远端程序调用方法,包括步骤:
9.根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中,根据所述映射表建立本地存根和客户端存根;
10.接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识;
11.根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。
12.为了解决上述技术问题,本发明采用的另一种技术方案为:
13.一种区块链的远端程序调用服务端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
14.根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中,根据所述映射表建立本地存根和客户端存根;
15.接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识;
16.根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。
17.本发明的有益效果在于:服务端先根据每个服务的唯一标识解析服务对应的方法,并将每个服务对应的方法及其唯一标识存储在映射表中,根据映射表建立本地存根和客户端存根,因此能够为每个服务建立对应的方法映射表,便于服务端和客户端使用;接收客户端根据客户端存根发送的请求,客户端发送请求的头部信息中包括服务唯一标识和方法唯一标识,即客户端可根据存根确定所需的服务与方法,并将其添加至请求头中;服务端根据请求中的服务唯一标识和方法唯一标识,在本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。因此,请求中不需要再使用字符串形式的服务名和方法名,避免因名称设计规范问题导致占用过多带宽,且服务对应的方法可自动解析并建立映射表,便于客户端用户请求时使用。
附图说明
18.图1为本发明实施例的一种区块链的远端程序调用方法的流程图;
19.图2为本发明实施例的一种区块链的远端程序调用服务端的示意图;
20.图3为远端程序调用数据流示意图;
21.图4为现有技术中远端程序调用传递服务名与方法名的示意图;
22.图5为本发明实施例的远端程序调用传递服务名与方法名的示意图;
23.标号说明:
24.1、一种区块链的远端程序调用服务端;2、存储器;3、处理器。
具体实施方式
25.为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
26.请参照图1,本发明实施例提供了一种区块链的远端程序调用方法,包括步骤:
27.根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中,根据所述映射表建立本地存根和客户端存根;
28.接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识;
29.根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。
30.从上述描述可知,本发明的有益效果在于:服务端先根据每个服务的唯一标识解析服务对应的方法,并将每个服务对应的方法及其唯一标识存储在映射表中,根据映射表建立本地存根和客户端存根,因此能够为每个服务建立对应的方法映射表,便于服务端和客户端使用;接收客户端根据客户端存根发送的请求,客户端发送请求的头部信息中包括服务唯一标识和方法唯一标识,即客户端可根据存根确定所需的服务与方法,并将其添加至请求头中;服务端根据请求中的服务唯一标识和方法唯一标识,在本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。因此,请求中不需要再使用字符串形式的服务名和方法名,避免因名称设计规范问题导致占用过多带宽,且服务对应的方法可自动解
析并建立映射表,便于客户端用户请求时使用。
31.进一步地,所述根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中包括:
32.根据每个服务的唯一标识,按照远端程序调用的接口规则解析所述服务对应的方法,将每个服务解析得到的方法的自增序号作为方法的唯一标识;
33.将所述服务解析得到的方法及其唯一标识存储至映射表中。
34.由上述描述可知,将每个服务解析得到的方法均有其对应的自增序号,将自增序号作为方法的唯一标识,因此后续结合服务唯一标识和方法唯一标识即可确定所请求的方法。
35.进一步地,所述按照远端程序调用的接口规则解析所述服务对应的方法包括:
36.判断服务的每个接口的返回值是否满足所述接口所需的返回值条件,若是,则解析出所述接口对应的方法,否则,输出所述接口不满足条件的提示并忽略所述接口。
37.由上述描述可知,通过返回值的判断能够省略不满足要求的接口,并且不是所有的方法都要作为接口,因此仅解析接口能够提高解析效率。
38.进一步地,所述接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识包括:
39.接收客户端根据所述客户端存根发送的请求,所述请求的协议头包括经过序列化的服务唯一标识和方法唯一标识;
40.所述接收客户端根据所述客户端存根发送的请求之后包括:
41.将所述请求进行反序列化,得到服务唯一标识和方法唯一标识。
42.由上述描述可知,通过对数据的序列化和反序列化,能够在不同环境下对数据进行格式的适应性改变。
43.进一步地,所述根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端包括:
44.根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用的返回信息包装为远端程序调用响应并进行序列化,得到调用结果;
45.将所述调用结果返回至所述客户端。
46.由上述描述可知,服务端中根据服务唯一标识和方法唯一标识,在本地存根中查找并调用对应的方法,并将调用的返回信息包装成rpc响应并进行序列化,能够在不同环境下对数据进行格式的适应性改变。
47.请参照图2,本发明另一实施例提供了一种区块链的远端程序调用服务端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
48.根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中,根据所述映射表建立本地存根和客户端存根;
49.接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识;
50.根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。
51.由上述描述可知,服务端先根据每个服务的唯一标识解析服务对应的方法,并将每个服务对应的方法及其唯一标识存储在映射表中,根据映射表建立本地存根和客户端存根,因此能够为每个服务建立对应的方法映射表,便于服务端和客户端使用;接收客户端根据客户端存根发送的请求,客户端发送请求的头部信息中包括服务唯一标识和方法唯一标识,即客户端可根据存根确定所需的服务与方法,并将其添加至请求头中;服务端根据请求中的服务唯一标识和方法唯一标识,在本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。因此,请求中不需要再使用字符串形式的服务名和方法名,避免因名称设计规范问题导致占用过多带宽,且服务对应的方法可自动解析并建立映射表,便于客户端用户请求时使用。
52.进一步地,所述根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中包括:
53.根据每个服务的唯一标识,按照远端程序调用的接口规则解析所述服务对应的方法,将每个服务解析得到的方法的自增序号作为方法的唯一标识;
54.将所述服务解析得到的方法及其唯一标识存储至映射表中。
55.由上述描述可知,将每个服务解析得到的方法均有其对应的自增序号,将自增序号作为方法的唯一标识,因此后续结合服务唯一标识和方法唯一标识即可确定所请求的方法。
56.进一步地,所述按照远端程序调用的接口规则解析所述服务对应的方法包括:
57.判断服务的每个接口的返回值是否满足所述接口所需的返回值条件,若是,则解析出所述接口对应的方法,否则,输出所述接口不满足条件的提示并忽略所述接口。
58.由上述描述可知,通过返回值的判断能够省略不满足要求的接口,并且不是所有的方法都要作为接口,因此仅解析接口能够提高解析效率。
59.进一步地,所述接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识包括:
60.接收客户端根据所述客户端存根发送的请求,所述请求的协议头包括经过序列化的服务唯一标识和方法唯一标识;
61.所述接收客户端根据所述客户端存根发送的请求之后包括:
62.将所述请求进行反序列化,得到服务唯一标识和方法唯一标识。
63.由上述描述可知,通过对数据的序列化和反序列化,能够在不同环境下对数据进行格式的适应性改变。
64.进一步地,所述根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端包括:
65.根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用的返回信息包装为远端程序调用响应并进行序列化,得到调用结果;
66.将所述调用结果返回至所述客户端。
67.由上述描述可知,服务端中根据服务唯一标识和方法唯一标识,在本地存根中查找并调用对应的方法,并将调用的返回信息包装成远端程序调用响应并进行序列化,能够在不同环境下对数据进行格式的适应性改变。
68.本发明上述的一种区块链的远端程序调用方法及服务端,适用于在区块链网络中
进行远端程序调用时,减少了网络传输中的带宽消耗,并提升远端程序调用的处理性能,以下通过具体的实施方式进行说明:
69.实施例一
70.请参照图1,一种区块链的远端程序调用方法,包括步骤:
71.s1、根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中,根据所述映射表建立本地存根和客户端存根。
72.s11、根据每个服务的唯一标识,按照远端程序调用的接口规则解析所述服务对应的方法,将每个服务解析得到的方法的自增序号作为方法的唯一标识。
73.其中,按照远端程序调用的接口规则解析所述服务对应的方法包括:判断服务的每个接口的返回值是否满足所述接口所需的返回值条件,若是,则解析出所述接口对应的方法,否则,输出所述接口不满足条件的提示并忽略所述接口。
74.具体的,调用rpc((remote procedure call,远端程序调用)注册服务接口,并传入服务id,其中服务id在开发实践中可以是自动生成的,也可以是通过数据传参得到的。按照rpc服务接口规则进行解析,在本实施例中以hello接口为例:
75.func hello(req request,resp*response)error{
76.//do something
77.}
78.hello接口的第一个参数是请求参数,第二个参数必须是指针类型的返回值参数,返回值是error类型的规则进行解析方法,对于不满足要求的接口输出提示并忽略。
79.并且,由于不是所有的方法都要作为接口,有些是逻辑处理接口,因此只需要进行接口解析即可。
80.s12、将所述服务解析得到的方法及其唯一标识存储至映射表中。
81.具体的,将解析出来的method(方法)按照从1开始的顺序放入映射表中,其中每个服务的接口都会有一个或多个,映射表结构为方法id对应方法的实体。
82.其中一个rpc的服务器中包括一个或多个服务service,存储在以服务id为键值的表中;一个服务service包括一个或多个方法method,存储在以方法id为键值的映射表中,在本实施例中server与service的结构如下:
83.type server struct{
84.servicemap map[uint32]*service//key:服务id,value:服务对象
[0085]
...
[0086]
}
[0087]
type service struct{
[0088]
method map[uint32]*methodtype//key:方法id,value:方法实体
[0089]
...
[0090]
}
[0091]
s2、接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识。
[0092]
s21、接收客户端根据所述客户端存根发送的请求,所述请求的协议头包括经过序列化的服务唯一标识和方法唯一标识。
[0093]
调用发起者,即客户端,将需要调用的服务id与方法id写入协议头,组装请求的信息,并根据所选择的序列化插件(如json、xml、gob、protobuf)进行序列化,然后以序列化的二进制数据作为消息载体发出rpc请求。
[0094]
s22、将所述请求进行反序列化,得到服务唯一标识和方法唯一标识。
[0095]
s3、根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。
[0096]
s31、根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用的返回信息包装为远端程序调用响应并进行序列化,得到调用结果。
[0097]
根据服务id和方法id,通过本地存根的映射表找到对应的服务方法并进行调用。服务提供者,即服务端,将调用后的返回信息包装成rpc响应,进行序列化后,发送给调用发起者。
[0098]
s32、将所述调用结果返回至所述客户端,调用发起者收到rpc响应。
[0099]
本实施例中,区块链将rpc作为底层数据通信的基础框架,主要用于普通节点间区块数据的同步、排序节点分发新打包的区块、共识过程中的通信等作用。无论在公有链还是联盟链的实现过程中,rpc对于通信时延的减少有着至关重要的作用。
[0100]
以hyperledger fabric中的gossip共识协议为例,首先,gossip服务定义了gossipstream和ping两个方法,分别用于接发流式消息和探测远程节点的存活状态,在定义好接口方法的基础上,接下来将通过本实施例所设计的远程程序调用方法生成服务端存根和客户端存根,设计好服务端相关的业务逻辑,然后启动gossip服务实例,以ping方法为例,当节点a想要探测节点b的存活状态时,节点a需调用gossip客户端存根中的ping方法,而后rpc底层框架将服务标识和方法标识等数据一并传输到节点b,节点b在收到ping消息后,通过反射机制调用服务端实现的ping逻辑,并将ping的返回值以同样的方式通过rpc底层框架传输给节点a,最后节点a进行相应处理得知节点b的存活状态,以此形成一应一答的调用流程。
[0101]
因此,请参照图4和图5,现有技术中传递服务名和方法名均是使用字符串的数据类型,而本实施例中所传递的服务名和方法名均是使用无符号整型的数据类型,避免因服务名或方法名过长,而占用过多的网络传输字节,能够减少网络传输中的带宽消耗,提升rpc的处理性能。
[0102]
实施例二
[0103]
请参照图2,一种区块链的远端程序调用服务端1,包括存储器2、处理器3以及存储在所述存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例一的一种区块链的远端程序调用方法的各个步骤。
[0104]
综上所述,本发明提供的一种区块链的远端程序调用方法及服务端,服务端先根据每个服务的唯一标识解析服务对应的方法,并将每个服务对应的方法及其唯一标识存储在映射表中,根据映射表建立本地存根和客户端存根,因此能够为每个服务建立对应的方法映射表;接收客户端根据客户端存根发送的请求,客户端可根据存根确定所需的服务与方法,并将其添加至请求头中;服务端根据请求中的服务唯一标识和方法唯一标识,在本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。因此,请求中不需要再使用
字符串形式的服务名和方法名,避免因名称设计规范问题导致占用过多带宽,且服务对应的方法可自动解析并建立映射表,便于客户端用户请求时使用。
[0105]
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

技术特征:
1.一种区块链的远端程序调用方法,其特征在于,包括步骤:根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中,根据所述映射表建立本地存根和客户端存根;接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识;根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。2.根据权利要求1所述的一种区块链的远端程序调用方法,其特征在于,所述根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中包括:根据每个服务的唯一标识,按照远端程序调用的接口规则解析所述服务对应的方法,将每个服务解析得到的方法的自增序号作为方法的唯一标识;将所述服务解析得到的方法及其唯一标识存储至映射表中。3.根据权利要求2所述的一种区块链的远端程序调用方法,其特征在于,所述按照远端程序调用的接口规则解析所述服务对应的方法包括:判断服务的每个接口的返回值是否满足所述接口所需的返回值条件,若是,则解析出所述接口对应的方法,否则,输出所述接口不满足条件的提示并忽略所述接口。4.根据权利要求1所述的一种区块链的远端程序调用方法,其特征在于,所述接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识包括:接收客户端根据所述客户端存根发送的请求,所述请求的协议头包括经过序列化的服务唯一标识和方法唯一标识;所述接收客户端根据所述客户端存根发送的请求之后包括:将所述请求进行反序列化,得到服务唯一标识和方法唯一标识。5.根据权利要求1所述的一种区块链的远端程序调用方法,其特征在于,所述根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端包括:根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用的返回信息包装为远端程序调用响应并进行序列化,得到调用结果;将所述调用结果返回至所述客户端。6.一种区块链的远端程序调用服务端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中,根据所述映射表建立本地存根和客户端存根;接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识;根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。
7.根据权利要求6所述的一种区块链的远端程序调用服务端,其特征在于,所述根据每个服务的唯一标识,解析每个服务对应的方法,并将每个服务对应的方法及其唯一标识存储至映射表中包括:根据每个服务的唯一标识,按照远端程序调用的接口规则解析所述服务对应的方法,将每个服务解析得到的方法的自增序号作为方法的唯一标识;将所述服务解析得到的方法及其唯一标识存储至映射表中。8.根据权利要求7所述的一种区块链的远端程序调用服务端,其特征在于,所述按照远端程序调用的接口规则解析所述服务对应的方法包括:判断服务的每个接口的返回值是否满足所述接口所需的返回值条件,若是,则解析出所述接口对应的方法,否则,输出所述接口不满足条件的提示并忽略所述接口。9.根据权利要求6所述的一种区块链的远端程序调用服务端,其特征在于,所述接收客户端根据所述客户端存根发送的请求,所述请求的头部信息包括服务唯一标识和方法唯一标识包括:接收客户端根据所述客户端存根发送的请求,所述请求的协议头包括经过序列化的服务唯一标识和方法唯一标识;所述接收客户端根据所述客户端存根发送的请求之后包括:将所述请求进行反序列化,得到服务唯一标识和方法唯一标识。10.根据权利要求6所述的一种区块链的远端程序调用服务端,其特征在于,所述根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用结果返回至所述客户端包括:根据所述请求中的服务唯一标识和方法唯一标识,在所述本地存根中查找并调用对应的方法,将调用的返回信息包装为远端程序调用响应并进行序列化,得到调用结果;将所述调用结果返回至所述客户端。

技术总结
本发明公开了一种区块链的远端程序调用方法及服务端,服务端先根据每个服务的唯一标识解析服务对应的方法,并将每个服务对应的方法及其唯一标识存储在映射表中,根据映射表建立本地存根和客户端存根,因此能够为每个服务建立对应的方法映射表;接收客户端根据客户端存根发送的请求,客户端可根据存根确定所需的服务与方法,并将其添加至请求头中;服务端根据请求中的服务唯一标识和方法唯一标识,在本地存根中查找并调用对应的方法,将调用结果返回至所述客户端。因此,请求中不需要再使用字符串形式的服务名和方法名,避免因名称设计规范问题导致占用过多带宽,且服务对应的方法可自动解析并建立映射表,便于客户端用户请求时使用。使用。使用。


技术研发人员:斯雪明
受保护的技术使用者:福建福链科技有限公司
技术研发日:2022.07.25
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-2715.html

最新回复(0)