一种进行远程过程调用的方法及装置制造方法及图纸

技术编号:17248078 阅读:30 留言:0更新日期:2018-02-11 06:09
本发明专利技术公开了一种进行远程过程调用的方法,包括:在调用远程过程时,创建与所述远程过程对应的信号事件,所述信号事件的初始状态为无信号状态;将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端;调用一预设函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的请求结果;在接收到所述请求结果时或在所述调用请求发送失败时,将所述信号事件的状态变更为有信号状态,从而使得所述预设函数将所述远程过程对应的线程唤醒。本发明专利技术实现了在进行远程过程调用时,能够降低系统资源浪费,保证程序性能,且在当调用请求发送失败时,调用端可以及时返回,避免一直阻塞的技术效果。

【技术实现步骤摘要】
一种进行远程过程调用的方法及装置
本专利技术涉及网络直播
,尤其涉及一种进行远程过程调用的方法及装置。
技术介绍
随着网络通信技术的进步和宽带网络的提速,网络直播得到了越来越多的发展和应用。在网络直播过程中,经常会进行远程过程调用(RemoteProcedureCall,简称:RPC)。所谓远程过程调用,就是一个进程调用另外一个进程所提供的方法,但是在调用者的角度仍然跟调用本进程的函数是一致的。在远程过程调用中,将要提供给被调用者进程的所有参数序列化为一个网络消息,然后通过网络传输发送到被调用者进程中。被调用者处理完成相应的服务后,将产生的结果也序列化成一个网络消息,发送到调用者进程。而在这个过程中,当调用者调用一个远程过程到收到结果之前,通常都是阻塞的;也就是在收到来自被调用者的应答结果(也可以称作:请求结果)之前,调用者调用一个远程过程之后,一直阻塞住,直到收到应答结果才会被唤醒。目前的远程过程调用机制中,通常在调用远程过程后,会循环调用系统的Sleep睡眠方法,直到接收到应答结果消息,或者是等待超时后,才会返回。但是,这种做法比较粗糙,因为调用系统Sleep函数时,并没有将当前线程的执行权剥夺,当前调用远程过程的线程仍然会耗用系统的CPU资源,造成资源的浪费,如果该进程中同时发起多个远程过程调用,那么系统CPU资源将造成巨大的浪费,同时也会急剧降低程序性能。并且,如果超时时间设置为无限等待的话,当调用请求发送失败的情况下,就会导致本次远程过程调用永远得不到对方的应答,从而导致调用端一直被阻塞,无法返回。
技术实现思路
本申请实施例通过提供一种进行远程过程调用的方法及装置,解决了现有技术中在进行远程过程调用时,存在系统资源浪费,降低程序性能的技术问题,实现了在进行远程过程调用时,能够降低系统资源浪费,保证程序性能,且在当调用请求发送失败时,调用端可以及时返回,避免一直阻塞的技术效果。第一方面,本申请通过本申请的一实施例提供如下技术方案:一种进行远程过程调用的方法,包括:在调用远程过程时,创建与所述远程过程对应的信号事件,所述信号事件的初始状态为无信号状态;将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端;调用一预设函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的请求结果;在接收到所述请求结果时或在所述调用请求发送失败时,将所述信号事件的状态变更为有信号状态,从而使得所述预设函数将所述远程过程对应的线程唤醒。优选地,所述调用一预设函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的结果消息,包括:调用WaitForSingleObject函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的结果消息。优选地,所述将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端之后,还包括:进入OnWrited回调函数中;判断所述OnWrited回调函数中的一预设参数是否为一预设值;若是,则确定所述调用请求发送失败。优选地,所述的远程过程调用的方法,还包括:判断所述线程是否为用户界面UI的主线程;若是,则接管所述UI的消息循环。优选地,所述接管所述UI的消息循环,包括:执行PeekMessage函数和/或TranslateMessage函数,从而接管所述UI的消息循环。优选地,所述将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端,包括;将所述调用请求发送给所述服务器,从而由所述服务器将所述调用请求转发给所述被调用端,其中,所述被调用端预先在所述服务器上注册了所述远程过程的调用服务。优选地,所述的远程过程调用的方法,还包括:接收所述服务器转发的来自所述被调用端的所述请求结果。第二方面,本申请通过本申请的一实施例提供如下技术方案:一种进行远程过程调用的装置,包括:创建单元,用于在调用远程过程时,创建与所述远程过程对应的信号事件,所述信号事件的初始状态为无信号状态;发送单元,用于将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端;调用单元,用于调用一预设函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的请求结果;变更单元,用于在接收到所述请求结果时或在所述调用请求发送失败时,将所述信号事件的状态变更为有信号状态,从而使得所述预设函数将所述远程过程对应的线程唤醒。第三方面,本申请通过本申请的一实施例提供如下技术方案:一种进行远程过程调用的装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:在调用远程过程时,创建与所述远程过程对应的信号事件,所述信号事件的初始状态为无信号状态;将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端;调用一预设函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的请求结果;在接收到所述请求结果时或在所述调用请求发送失败时,将所述信号事件的状态变更为有信号状态,从而使得所述预设函数将所述远程过程对应的线程唤醒。第四方面,本申请通过本申请的一实施例提供如下技术方案:一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:在调用远程过程时,创建与所述远程过程对应的信号事件,所述信号事件的初始状态为无信号状态;将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端;调用一预设函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的请求结果;在接收到所述请求结果时或在所述调用请求发送失败时,将所述信号事件的状态变更为有信号状态,从而使得所述预设函数将所述远程过程对应的线程唤醒。本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:在本申请实施例中,公开了一种进行远程过程调用的方法,包括:在调用远程过程时,创建与所述远程过程对应的信号事件,所述信号事件的初始状态为无信号状态;将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端;调用一预设函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的请求结果;在接收到所述请求结果时或在所述调用请求发送失败时,将所述信号事件的状态变更为有信号状态,从而使得所述预设函数将所述远程过程对应的线程唤醒。由于在调用远程过程时,将远程过程对应的线程挂起,所以解决了现有技术中在进行远程过程调用时,存在系统资源浪费,降低程序性能的技术问题,实现了在进行远程过程调用时,能够降低系统资源浪费,保证程序性能的技术效果。同时,由于在调用请求发送失败时,将信号事件的状态变更为有信号状态,以将远程过程对应的线程唤醒,从而解决了当调用请求发送失败时,调用端一直被阻塞,无法返回的技术问题,实现了在当调用请求发送失败时,调用端可以及时返回,避免一直阻塞的技术效果。附图说明为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本申请实施例中一种进行远程过程调用的方法的流程图;图2为本申请实施例中一种进行远程过程调用的装置200的结构图;图3为本申请实施例中一种进行远程过程调用的装置300的结构图;图4为本申请实本文档来自技高网...
一种进行远程过程调用的方法及装置

【技术保护点】
一种进行远程过程调用的方法,其特征在于,包括:在调用远程过程时,创建与所述远程过程对应的信号事件,所述信号事件的初始状态为无信号状态;将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端;调用一预设函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的请求结果;在接收到所述请求结果时或在所述调用请求发送失败时,将所述信号事件的状态变更为有信号状态,从而使得所述预设函数将所述远程过程对应的线程唤醒。

【技术特征摘要】
1.一种进行远程过程调用的方法,其特征在于,包括:在调用远程过程时,创建与所述远程过程对应的信号事件,所述信号事件的初始状态为无信号状态;将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端;调用一预设函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的请求结果;在接收到所述请求结果时或在所述调用请求发送失败时,将所述信号事件的状态变更为有信号状态,从而使得所述预设函数将所述远程过程对应的线程唤醒。2.如权利要求1所述的以同步方式进行远程过程调用的方法,其特征在于,所述调用一预设函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的结果消息,包括:调用WaitForSingleObject函数将所述远程过程对应的线程挂起,并等待所述被调用端返回的结果消息。3.如权利要求1所述的远程过程调用的方法,其特征在于,所述将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端之后,还包括:进入OnWrited回调函数中;判断所述OnWrited回调函数中的一预设参数是否为一预设值;若是,则确定所述调用请求发送失败。4.如权利要求1所述的远程过程调用的方法,其特征在于,还包括:判断所述线程是否为用户界面UI的主线程;若是,则接管所述UI的消息循环。5.如权利要求3所述的远程过程调用的方法,其特征在于,所述接管所述UI的消息循环,包括:执行PeekMessage函数和/或TranslateMessage函数,从而接管所述UI的消息循环。6.如权利要求1~5任一所述的远程过程调用的方法,其特征在于,所述将调用所述远程过程所需的调用请求发送给所述远程过程的被调用端,包括;将所述调用请求发送给所述服务器,从而由所述服务器将所述调用请求转发给所述被调用端,其中,所述被调用端预先在所述服务器上注册了所述远程过程的调用服务。7.如权...

【专利技术属性】
技术研发人员:杨亮陈少杰张文明
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1