发明内容
本发明实施例提供一种进行进程状态检测的方法及装置,用以解决现有的建立通信链路的方式由于受到单一链路资源的限制,很容易出现连接耗时过长,甚至连接失败的问题。
本发明实施例提供一种进行进程状态检测的方法,包括:
创建需要进行进程状态检测的服务端和客户端;
按照第一设定时长循环切换所述服务端监听链路时所采用的链路连接方式,按照第二设定时长循环切换所述客户端发送连接请求时所采用的链路连接方式,直到所述服务端和客户端之间成功建立链路连接;其中,所述第一设定时长与所述第二设定时长不相等,且所述第一设定时长与所述第二设定时长之间不存在倍数关系;
基于所述服务端和客户端建立的所述链路连接,进行所述服务端和客户端的进程状态检测。
可选地,所述创建需要进行进程状态检测的服务端和客户端,包括:
根据预先建立的链路管理底层库提供的输入参数,分别创建进行进程状态检测的服务端和客户端;其中,所述链路管理底层库为将实现链路连接的各功能函数集中在一个文件中后形成的底层库。
可选地,若所述服务端和客户端由同一个内核所管理,则所述链路连接方式包括:传输控制协议TCP连接、用户数据报协议UDP连接和基于进程间共享内存的通信方式进行连接;
若所述服务端和客户端由不同的内核所管理,则所述链路连接方式包括:TCP连接和UDP连接。
可选地,所述基于所述服务端和客户端建立的所述链路连接,进行进程状态检测,包括:
基于所述服务端和客户端之间建立的所述链路连接,在所述服务端和客户端之间传输心跳信息;
若所述服务端和客户端之间的心跳信息传输正常,则确定所述服务端和客户端的进程状态正常,否则确定所述服务端或客户端的进程状态异常。
可选地,所述确定所述服务端或客户端的进程状态异常之后,还包括:
按照第一设定时长循环切换所述服务端监听链路时所采用的链路连接方式,按照第二设定时长循环切换所述客户端发送连接请求时所采用的链路连接方式,直到所述服务端和客户端之间重新建立链路连接。
本发明实施例提供一种进行进程状态检测的装置,包括:
创建模块,用于创建需要进行进程状态检测的服务端和客户端;
连接模块,用于按照第一设定时长循环切换所述服务端监听链路时所采用的链路连接方式,按照第二设定时长循环切换所述客户端发送连接请求时所采用的链路连接方式,直到所述服务端和客户端之间成功建立链路连接;其中,所述第一设定时长与所述第二设定时长不相等,且所述第一设定时长与所述第二设定时长之间不存在倍数关系;
检测模块,用于基于所述服务端和客户端建立的所述链路连接,进行所述服务端和客户端的进程状态检测。
可选地,所述创建模块具体用于:
根据预先建立的链路管理底层库提供的输入参数,分别创建进行进程状态检测的服务端和客户端;其中,所述链路管理底层库为将实现链路连接的各功能函数集中在一个文件中后形成的底层库。
可选地,若所述服务端和客户端由同一个内核所管理,则所述链路连接方式包括:传输控制协议TCP连接、用户数据报协议UDP连接和基于进程间共享内存的通信方式进行连接;
若所述服务端和客户端由不同的内核所管理,则所述链路连接方式包括:TCP连接和UDP连接。
可选地,所述检测模块具体用于:
基于所述服务端和客户端之间建立的所述链路连接,在所述服务端和客户端之间传输心跳信息;
若所述服务端和客户端之间的心跳信息传输正常,则确定所述服务端和客户端的进程状态正常,否则确定所述服务端或客户端的进程状态异常。
可选地,所述连接模块还用于,在所述检测模块确定所述服务端或客户端的进程状态异常之后,按照第一设定时长循环切换所述服务端监听链路时所采用的链路连接方式,按照第二设定时长循环切换所述客户端发送连接请求时所采用的链路连接方式,直到所述服务端和客户端之间重新建立链路连接。
本发明实施例在创建需要进行进程状态检测的服务端和客户端后,分别按照第一设定时长和第二设定时长循环切换所述服务端监听链路和客户端发送连接请求时所采用的链路连接方式,直到所述服务端和客户端之间成功建立链路连接,之后,基于服务端和客户端建立的所述链路连接,进行进程状态检测;从而采用本发明实施例,当采用一种链路连接方式无法成功建立链路连接时,会自动切换到下一种链路连接方式,提高了建立链路连接的可靠性。
具体实施方式
本发明实施例在创建需要进行进程状态检测的服务端和客户端后,分别按照第一设定时长和第二设定时长循环切换所述服务端监听链路和客户端发送连接请求时所采用的链路连接方式,直到所述服务端和客户端之间成功建立链路连接,之后,基于服务端和客户端建立的所述链路连接,进行进程状态检测;从而采用本发明实施例,当采用一种链路连接方式无法成功建立链路连接时,会自动切换到下一种链路连接方式,提高了建立链路连接的可靠性。
下面结合说明书附图对本发明实施例作进一步详细描述。
如图1所示,为本发明实施例提供的进行进程状态检测的方法流程图,包括以下步骤:
S101:创建需要进行进程状态检测的服务端和客户端;
该步骤中,针对需要进行进程状态检测的两个进程(一个主进程和一个副进程),分别创建服务端和客户端,所述服务端和客户端之间通信,实现进程状态的检测;这里主进程和副进程可以分别是一个监控进程和一个业务进程或两个业务进程。
可选地,步骤S101中,所述创建需要进行进程状态检测的服务端和客户端,包括:
根据预先建立的链路管理底层库提供的输入参数,分别创建进行进程状态检测的服务端和客户端;其中,所述链路管理底层库为将实现链路连接的各功能函数集中在一个文件中后形成的底层库。
在具体实施过程中,本发明实施例构建了链路管理底层库来提供函数调用接口,具体地,该底层库可以是一个动态库。其中,针对主进程,可以通过该底层库提供的服务端的输入参数来调用底层库,创建服务端,针对副进程,可以通过该底层库提供的客户端的输入参数来调用底层库,创建客户端;之后,利用该底层库,基于创建的服务端和客户端自动建立链路连接,并返回链路建立信息以及对方进程的运行状态。
传统方式下主要通过上层应用软件直接调用通信接口来建立进程间链路连接,如图2所示,为传统方式下建立进程间的链路连接的示意图。这种链路连接方式对软件人员的网络接口熟悉程度要求较高,使用不方便,很容易出现操作不严谨而导致进程异常等问题。在本发明实施例的上述实施方式下,采用封装好的底层库自动建立进程间通信链路连接;与传统的通过上层应用软件直接调用通信接口的方式相比,实现了软件代码的集成化,方便了软件人员的开发和维护。如图3(a)和图3(b)所示,分别为服务端进程和客户端进程由同一内核和由不同内核管理时建立进程间的链路连接的示意图。其中,当服务端进程和客户端进程由同一内核管理时,可以采用TCP连接、UDP连接和基于进程间共享内存的通信方式进行连接这三种链路连接方式,当服务端进程和客户端进程由不同的内核管理时,可以采用TCP连接和UDP连接这两种链路连接方式,以下步骤中会做进一步说明。
S102:按照第一设定时长循环切换所述服务端监听链路时所采用的链路连接方式,按照第二设定时长循环切换所述客户端发送连接请求时所采用的链路连接方式,直到所述服务端和客户端之间成功建立链路连接;其中,所述第一设定时长与所述第二设定时长不相等,且所述第一设定时长与所述第二设定时长之间不存在倍数关系;
可选地,若所述服务端和客户端由同一个内核所管理,则所述链路连接方式包括:传输控制协议TCP连接、用户数据报协议UDP连接和基于进程间共享内存的通信方式进行连接;
若所述服务端和客户端由不同的内核所管理,则所述链路连接方式包括:TCP连接和UDP连接。
在该步骤中,若服务端与客户端由同一个内核所管理,则针对服务端,可以循环选择TCP连接、UDP连接和基于进程间共享内存的通信方式进行连接的其中一种去监听链路,直至该服务端与客户端连接上;而针对客户端,也循环选择TCP连接、UDP连接和基于进程间共享内存的通信方式进行连接的其中一种去发送连接请求,直至该客户端与服务端连接上;当服务端和客户端的链路连接方式选择一致,且选择的链路连接方式的链路资源支持服务端与客户端建立链路连接,服务端与客户端之间就可以成功建立链路连接,并互相传输心跳信息,从而获取对端进程的运行状态。同理,若服务端与客户端由不同的内核所管理,则针对服务端,可以循环选择TCP连接和UDP连接的其中一种去监听链路,直至该服务端与客户端连接上;而针对客户端,也循环选择TCP连接和UDP连接的其中一种去发送连接请求,直至该客户端与服务端连接上。本发明实施例中将上述这种通过循环切换链路连接方式来建立链路连接的方法称为分时片选法。
在具体实施中,由于服务端监听链路和客户端发送连接请求的时间可能会不同步,若设置第一设定时长与第二设定时长的值相等或设置两者成倍数关系,即使服务端和客户端循环切换链路连接方式的顺序保持一致,也有可能出现服务端和客户端所采用的链路连接方式无法保持一致的情况,比如,若所述链路连接方式包括TCP连接和UDP连接,服务端和客户端循环切换链路连接方式的顺序依次为TCP连接、UDP连接,当创建好服务端,服务端开始采用TCP连接方式监听链路,当创建好客户端,客户端端开始采用TCP连接方式发送连接请求,但是当客户端开始发送连接请求时,服务端可能刚好已经切换到了UDP连接方式,如此导致服务端和客户端永远无法建立连接。为避免该问题的出现,本发明实施例中将第一设定时长与第二设定时长分别设置为不同的两个值,可以设置第一设定时长大于第二设定时长,也可以设置第一设定时长小于第二设定时长,同时,第一设定时长与第二设定时长之间不存在倍数关系,这样,可以保证服务端和客户端周期性达到链路连接方式一致的状态。
如图4所示,为本发明实施例中服务端和客户端循环切换链路连接方式的示意图;图中,圆的周长表示持续时间,每种链路连接方式的持续时长都是1/3周长,其中大圆周长的1/3为服务端循环选择链路连接方式时每种链路连接方式的持续时长T,小圆周长的1/3为客户端循环选择链路连接方式时每种链路连接方式的持续时长t,其中T=n×t(1<n<2)。在具体实施中,大圆和小圆相切旋转,表示服务端和客户端随时间变化循环选择不同的链路连接方式。从0时刻开始,大圆顺时针旋转,小圆逆时针旋转,经过时间T×t后,大圆转动t圈,小圆转动T圈,两个圆的切点和在0时刻时的切点的位置相同,在此期间,大圆边上的每个点都会分别与小圆边上的不同点相切。针对任意一种链路连接方式,大圆和小圆一定有同时处于该链路连接方式的时刻。
S103:基于所述服务端和客户端建立的所述链路连接,进行所述服务端和客户端的进程状态检测。
基于步骤S102中服务端和客户端成功建立的所述链路连接,在该步骤S103中,基于建立的该链路连接,服务端和客户端之间可以互相传输通信信息,以检测对方进程是否状态正常。
可选地,步骤S103中,基于所述服务端和客户端建立的所述链路连接,进行进程状态检测,包括:
基于所述服务端和客户端之间建立的所述链路连接,在所述服务端和客户端之间传输心跳信息;
若所述服务端和客户端之间的心跳信息传输正常,则确定所述服务端和客户端的进程状态正常,否则确定所述服务端或客户端的进程状态异常。
在具体实施过程中,服务端和客户端可以在建立成功的链路上传输心跳信息,根据心跳信息的传输情况,确定对端进程的运行状态。具体地,客户端发送心跳包到服务端之后,启动心跳等待定时器,定时器的定时时间theat=1.5秒;服务端接收到心跳包后,经过预设的心跳时间间隔△t(△t=1秒),给客户端发送返回的心跳包,随即也启动心跳等待定时器。服务端和客户端只要在定时时间theat内接收到对方发来的心跳包,则判断心跳链路正常,否则确定心跳链路异常,返回链路失败信息及对方进程异常的信息。
可选地,所述确定所述服务端或客户端的进程状态异常之后,还包括:
按照第一设定时长循环切换所述服务端监听链路时所采用的链路连接方式,按照第二设定时长循环切换所述客户端发送连接请求时所采用的链路连接方式,直到所述服务端和客户端之间重新建立链路连接。
在具体实施过程中,当建立的通信链路发生异常中断时,除返回链路失败信息及对方进程异常的信息之外,还可以切换到另外一种链路连接方式重新尝试建立连接,并再次启动上述循环切换链路连接方式的过程,直到服务端和客户端之间再次成功建立链路连接。
为了更好地说明本发明实施例进行进程状态检测的方法流程,下面通过一个具体的实施例作进一步说明。
如图5所示,为本发明实施例二提供的进行进程状态检测的方法流程图,包括:
S501a:主进程根据建立的链路管理动态库提供的输入参数,创建进行进程状态检测的服务端;所述链路管理底层库为将实现链路连接的各功能函数集中在一个文件中后形成的底层库;
S501b:副进程根据建立的链路管理动态库提供的输入参数,创建进行进程状态检测的客户端。
这里,链路管理动态库(LinkMgr_dll)可以提供函数调用接口,LinkMgr_dll作为一个映象,被调用者加载到其虚拟空间中,以独立副本的形式存在。
在具体实施中,主进程(如Amfc进程)以服务端的参数形式调用LinkMgr_dll创建服务端,副进程(如Sig进程)以客户端的参数形式调用LinkMgr_dll创建客户端。各进程在调用LinkMgr_dll时可以选用默认参数或自设参数进行配置,如果选用默认参数,LinkMgr_dll会首先确定需要建立链路连接的两个进程是否为同一内核所管理,如果是,则可以选用TCP连接、UDP连接和基于进程间共享内存的通信方式进行连接三种链路连接方式,否则只能选择TCP和UDP两种链路连接方式。如果选用自设参数进行配置,则在选择链路参数时也需要遵循上述原则,否则LinkMgr_dll会进行报错处理。当LinkMgr_dll被两个进程成功调用后,创建的服务端和客户端将自动建立链路连接并返回链路建立信息以及对方进程的运行状态。
S502a:服务端根据链路初始化参数,选择TCP连接、UDP连接和基于进程间共享内存的通信方式进行连接中的其中一种进行链路初始化,并开始监听链路;
S502b:客户端根据链路初始化参数,选择TCP连接、UDP连接和基于进程间共享内存的通信方式进行连接中的其中一种进行链路初始化,并发起连接请求。
这里,服务端监听链路的监听等待持续时间T=1秒,如果在该持续时间T内仍没有成功建立链路连接,则变换链路连接方式,直至与客户端建立连接,链路连接方式的变换次序可以为:TCP连接->UDP连接->基于进程间共享内存的通信方式进行连接,如此循环。与此同时,客户端发送连接请求的持续时间t=0.7秒,如果在该持续时间t内仍没有成功建立链路连接,则变换链路连接方式,直至与服务端建立连接,链路连接方式的变换次序可以为:TCP连接->基于进程间共享内存的通信方式进行连接->UDP连接,如此循环。
S503a:服务端和客户端之间成功建立链路连接后,通过互相传输心跳信息来检测对方进程的运行状态;
S503b:若心跳信息传输正常,则定期返回指示链路连接正常的信息及进程状态信息,若心跳信息传输异常中断,则返回指示链路识别及进程状态异常的信息。
这里,客户端发送心跳包到服务端之后,启动心跳等待定时器,定时器的定时时间theat=1.5秒;服务端接收到心跳包后,经过预设的心跳时间间隔△t(△t=1秒),给客户端发送返回的心跳包,随即也启动心跳等待定时器。服务端和客户端只要在定时时间theat内接收到对方发来的心跳包,则判断心跳链路正常,否则确定心跳链路异常,LinkMgr_dll的函数返回链路失败信息及对方进程异常的信息。
S504a:当服务端与客户端之间的链路连接异常中断后,服务端切换到另外一种链路连接方式,重新启动上述循环切换链路连接方式的过程,直到与客户端之间再次建立连接;
S504b:当服务端与客户端之间的链路连接异常中断后,客户端切换到另外一种链路连接方式,重新启动上述循环切换链路连接方式的过程,直到与服务端之间再次建立连接。
这里,当建立的心跳链路发生异常中断时,触发心跳等待定时器,LinkMgr_dll确定主副进程间的心跳链路不正常,LinkMgr_dll的函数返回心跳链路失败信息和对端进程状态异常的信息。同时,LinkMgr_dll再次启动上述循环切换链路连接方式的过程(分时片选),自动切换到其它链路连接方式重新尝试建立连接。
基于同一发明构思,本发明实施例中还提供了一种进行进程状态检测的方法对应的进行进程状态检测的装置,由于该装置解决问题的原理与本发明实施例进行进程状态检测的方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
如图6所示,为本发明实施例提供的进行进程状态检测的装置结构示意图,包括:
创建模块61,用于创建需要进行进程状态检测的服务端和客户端;
连接模块62,用于按照第一设定时长循环切换所述服务端监听链路时所采用的链路连接方式,按照第二设定时长循环切换所述客户端发送连接请求时所采用的链路连接方式,直到所述服务端和客户端之间成功建立链路连接;其中,所述第一设定时长与所述第二设定时长不相等,且所述第一设定时长与所述第二设定时长之间不存在倍数关系;
检测模块63,用于基于所述服务端和客户端建立的所述链路连接,进行所述服务端和客户端的进程状态检测。
可选地,所述创建模块61具体用于:
根据预先建立的链路管理底层库提供的输入参数,分别创建进行进程状态检测的服务端和客户端;其中,所述链路管理底层库为将实现链路连接的各功能函数集中在一个文件中后形成的底层库。
可选地,若所述服务端和客户端由同一个内核所管理,则所述链路连接方式包括:传输控制协议TCP连接、用户数据报协议UDP连接和基于进程间共享内存的通信方式进行连接;
若所述服务端和客户端由不同的内核所管理,则所述链路连接方式包括:TCP连接和UDP连接。
可选地,所述检测模块63具体用于:
基于所述服务端和客户端之间建立的所述链路连接,在所述服务端和客户端之间传输心跳信息;
若所述服务端和客户端之间的心跳信息传输正常,则确定所述服务端和客户端的进程状态正常,否则确定所述服务端或客户端的进程状态异常。
可选地,所述连接模块62还用于,在所述检测模块63确定所述服务端或客户端的进程状态异常之后,按照第一设定时长循环切换所述服务端监听链路时所采用的链路连接方式,按照第二设定时长循环切换所述客户端发送连接请求时所采用的链路连接方式,直到所述服务端和客户端之间重新建立链路连接。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、装置(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。