本发明专利技术公开了一种基于Node.js的RPC同步通信方法及设备,方法应用于本地端,本地端与远程端之间通过TCP连接,方法包括:向远程端发送远程调用函数的请求,并在发送请求之后使用基于c++的Application.DoEvent在缓存中进行循环检测;若在缓存中检测到响应包,则获取响应包对应的响应值;其中响应包由远程端处理请求后产生,并由远程端发送至缓存中。本方法通过本地端循环调用c++层的Application.DoEvent事件处理界面操作,无需将调用模块与被调用模块的函数改为异步函数,降低了远程调用的复杂度,提高了效率。提高了效率。提高了效率。
【技术实现步骤摘要】
基于Node.js的RPC同步通信方法及设备
[0001]本专利技术涉及数据通信
,特别涉及一种基于Node.js的RPC同步通信方法及设备。
技术介绍
[0002]RPC(Remote Procedure Call,远程过程调用),简单的理解是一个节点请求另一个节点提供的服务。
[0003]目前基于Node.js(一个基于Chrome V8引擎的JavaScript运行环境)的RPC同步通信采用async/await(异步/等待)等类似的方式模拟同步通信,即客户端或服务端发起请求,等待对方处理并同步返回结果。然而实际开发过程中,有时需要将本地模块改为远程调用,目前使用的做法是使用RPC远程调用。
[0004]当本地依赖的模块改为远程模块时,如果需要同步调用(即实现本地与远程的同步调用),则需要将调用模块的接口以及接口调用的函数等修改为异步函数,并在调用时使用等待的语法或在回调中获取返回值后再处理后面的操作。这样将导致模块接口调用的方法都需要改动,尤其是复用本地同步模块时,如果某个函数调用的本地模块改为了远程模块,需要改动跟这个函数相关的大量的函数为异步函数,增加了远程调用的复杂度,并容易忽略改动中的同步等待而导致出现同步问题。
技术实现思路
[0005]本专利技术旨在至少解决现有技术中存在的技术问题。为此,本专利技术提出一种基于Node.js的RPC同步通信方法及设备。无需将调用模块与被调用模块的函数改为异步函数,即可实现本地与远程的同步调用,降低了远程调用的复杂度,提高了效率。
[0006]本专利技术的第一方面,提供了一种基于Node.js的RPC同步通信方法,应用于本地端,所述本地端与远程端之间通过TCP连接,包括以下步骤:
[0007]向所述远程端发送远程调用函数的请求,并在发送请求之后使用基于c++的Application.DoEvent在缓存中进行循环检测;
[0008]若在所述缓存中检测到响应,则获取所述响应;其中所述响应由所述远程端处理所述请求后产生,并由所述远程端发送至所述缓存中。
[0009]根据本专利技术的实施例,至少具有如下技术效果:
[0010]本方法通过循环调用c++层的Application.DoEvent事件处理界面操作,防止线程假死,直到检测缓存中出现到此次请求的响应包,此时返回响应包的响应值,结束本次远程调用。本方法通过本地端循环调用c++层的Application.DoEvent事件处理界面操作,无需将调用模块与被调用模块的函数改为异步函数,即可实现本地与远程的同步调用,降低了远程调用的复杂度,提高了效率;尤其是对于复用本地同步模块的情况,不仅避免将请求的函数相关的大量的函数修改为异步函数,而且也避免了因改动中的同步等待而导致出现的同步问题。
[0011]本专利技术的第二方面,提供了一种基于Node.js的RPC同步通信方法,应用于远程端,所述远程端与本地端之间通过TCP连接,所述本地端用于向所述远程端发送远程调用函数的请求,并在发送所述请求之后,使用基于c++的Application.DoEvent在缓存中进行循环检测,所述基于Node.js的RPC同步通信方法包括以下步骤:
[0012]接收所述请求;
[0013]处理所述请求,并生成响应;
[0014]将所述响应发送至所述缓存中,以使所述本地端基于c++的Application.DoEvent检测所述响应,并使所述本地端获得所述响应。
[0015]根据本专利技术的实施例,至少具有如下技术效果:
[0016]本方法通过循环调用c++层的Application.DoEvent事件处理界面操作,防止线程假死,直到检测缓存中出现到此次请求的响应包,此时返回响应包的响应值,结束本次远程调用。本方法通过本地端循环调用c++层的Application.DoEvent事件处理界面操作,无需将调用模块与被调用模块的函数改为异步函数,即可实现本地与远程的同步调用,降低了远程调用的复杂度,提高了效率;尤其是对于复用本地同步模块的情况,不仅避免将请求的函数相关的大量的函数修改为异步函数,而且也避免了因改动中的同步等待而导致出现的同步问题。
[0017]本专利技术的第三方面,提供了一种基于Node.js的RPC同步通信设备,包括:至少一个控制处理器和用于与所述至少一个控制处理器通信连接的存储器;所述存储器存储有可被所述至少一个控制处理器执行的指令,所述指令被所述至少一个控制处理器执行,以使所述至少一个控制处理器能够执行本专利技术第一方面所述的基于Node.js的RPC同步通信方法和/或本专利技术第二方面所述的基于Node.js的RPC同步通信方法。
[0018]本专利技术第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行本专利技术第一方面所述的基于Node.js的RPC同步通信方法和/或本专利技术第二方面所述的基于Node.js的RPC同步通信方法。
[0019]本专利技术的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本专利技术的实践了解到。
附图说明
[0020]本专利技术的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
[0021]图1是本专利技术实施例提供的一种基于Node.js的RPC同步通信方法的流程示意图;
[0022]图2是本专利技术实施例提供的一种基于Node.js的RPC同步通信方法的逻辑示意图。
具体实施方式
[0023]下面详细描述本专利技术的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本专利技术,而不能理解为对本专利技术的限制。
[0024]现有技术为:基于Node.js的RPC同步通信采用async/await等类似的方式模拟同
步通信:客户端或服务端发起请求,等待对方处理并同步返回结果,当本地依赖的模块改为远程模块时,如果需要同步调用,则需要将调用模块的接口以及接口调用的函数等修改为异步函数,并在调用时使用等待的语法或在回调中获取返回值后再处理后面的操作。例如Await/async方案将函数xx()改为async xx(),调用时同步调用xx()改为await xx();或回调方案,把函数xx()改为xx(callback),调用时需要先定义回调函数callback并当参数传入调用。这样将导致模块接口调用的方法都需要改动,增加了执行远程调用的复杂度,降低了执行效率。
[0025]当本地端需要调用远程端的远程模块时,本地端发送请求包之后通过循环调用c++层的Application.DoEvent事件处理界面操作对本地端的本地缓存中是否存在有远程端返回的响应包进行检测,防止线程假死,直到发现本地缓存存在此请求的响应包或超时,返回响应包的响应值或抛出超时异常,结束调用本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种基于Node.js的RPC同步通信方法,其特征在于,应用于本地端,所述本地端与远程端之间通过TCP连接,包括以下步骤:向所述远程端发送远程调用函数的请求,并在发送请求之后使用基于c++的Application.DoEvent在缓存中进行循环检测;若在所述缓存中检测到响应,则获取所述响应;其中所述响应由所述远程端处理所述请求后产生,并由所述远程端发送至所述缓存中。2.根据权利要求1所述的基于Node.js的RPC同步通信方法,其特征在于,还包括步骤:若在设定时间内未检测到所述响应,则抛出超时异常。3.根据权利要求1至2任一项所述的基于Node.js的RPC同步通信方法,其特征在于,所述本地端与所述远程端之间通过socket连接。4.一种基于Node.js的RPC同步通信方法,其特征在于,应用于远程端,所述远程端与本地端之间通过TCP连接,所述本地端用于向所述远程端发送远程调用函数的请求,并在发送所述请求之后,使用基于c++的Application.DoEvent在缓存中进行循环检测,所述基于Node.js的RPC同步通信方法包括以下步骤:接...
【专利技术属性】
技术研发人员:梁威,阳坤,
申请(专利权)人:长沙博为软件技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。