发明内容
本发明实施例提供了一种防区状态确定的方法及设备,分布式确定防区状态,降低服务端负荷。
本发明实施例提供了一种防区状态确定的方法,应用于包括服务端、客户端与防区的***中,包括:
所述服务端从订阅所述防区的状态的客户端中选择一个客户端作为所述防区的状态的计算者,由所述计算者根据所述防区的告警确定所述防区的状态;
所述服务端接收并记录所述计算者发送的所述防区的状态,并在所述防区的状态发生改变时通知所述计算者之外的订阅所述防区的状态的客户端。
所述服务端从订阅所述防区的状态的客户端中选择一个客户端作为所述防区的状态的计算者包括:
所述服务端将第一次订阅所述防区的状态的客户端、或者随机选择订阅所述防区的状态的一个客户端作为所述防区的状态的计算者。
所述计算者根据所述防区的告警确定所述防区的状态之前,还包括:
所述服务端为所述计算者订阅所述防区的告警;或者
所述计算者周期性向所述服务端查询所述防区的告警。
所述服务端从订阅所述防区的状态的客户端中选择一个客户端作为所述防区的状态的计算者包括:
当所述服务端接收到任意客户端对所述防区的状态的获取请求时,所述服务端确定当前是否已有其他客户端订阅所述防区的状态;
如果当前没有其他客户端订阅所述防区的状态,所述服务端将发送该获取请求的客户端作为所述防区的状态的计算者。
所述服务端从订阅所述防区的状态的客户端中选择一个客户端作为所述防区的状态的计算者之后,还包括:
所述服务端接收到任意客户端对所述防区的状态的获取请求,判断发送该获取请求的客户端是否已经订阅所述防区的状态;
如果判断结果为否,所述服务端为发送该获取请求的客户端订阅所述防区的状态。
如果发送该获取请求的客户端已经订阅所述防区的状态、或者所述服务端为发送该获取请求的客户端订阅所述防区的状态之后,还包括:
所述服务端将当前记录的所述防区的状态向发送该获取请求的客户端发送;和/或
所述服务端在所述防区的状态发生改变时向发送该获取请求的客户端发送所述防区的状态。
当所述计算者无法正常工作时,所述服务端从所述计算者之外的订阅所述防区的状态的客户端中选择一个客户端作为新的计算者。
本发明实施例提供了一种防区状态确定的设备,作为服务端应用于包括所述服务端、客户端与防区的***中,包括:
选择单元,用于从订阅所述防区的状态的客户端中选择一个客户端作为所述防区的状态的计算者;
接收单元,用于接收并记录所述计算者根据所述防区的告警发送的所述防区的状态;
通知单元,用于在所述防区的状态发生改变时通知所述计算者之外的订阅所述防区的状态的客户端。
所述选择单元具体用于:
将第一次订阅所述防区的状态的客户端、或者随机选择订阅所述防区的状态的一个客户端作为所述防区的状态的计算者。
还包括:
订阅单元,与所述选择单元连接,用于为所述计算者订阅所述防区的告警;或者
发送单元,用于根据所述计算者对所述防区的告警的查询请求,向所述计算者发送所述防区的告警。
所述选择单元还用于:
当所述服务端接收到任意客户端对所述防区的状态的获取请求时,确定当前是否已有其他客户端订阅所述防区的状态;
如果当前没有其他客户端订阅所述防区的状态,将发送该获取请求的客户端作为所述防区的状态的计算者。
所述接收单元还用于:接收任意客户端对所述防区的状态的获取请求;
该设备还包括判断单元,与所述接收单元连接,用于判断发送该获取请求的客户端是否已经订阅所述防区的状态;
该设备还包括订阅单元,与所述判断单元连接,用于如果发送该获取请求的客户端尚未订阅所述防区的状态,则为发送该获取请求的客户端订阅所述防区的状态。
所述通知单元还用于:
如果发送该获取请求的客户端已经订阅所述防区的状态、或者所述服务端为发送该获取请求的客户端订阅所述防区的状态之后,将当前记录的所述防区的状态向发送该获取请求的客户端发送;和/或,在所述防区的状态发生改变时向发送该获取请求的客户端发送所述防区的状态。
所述选择单元还用于:
当所述计算者无法正常工作时,从所述计算者之外的订阅所述防区的状态的客户端中选择一个客户端作为新的计算者。
与现有技术相比,本发明至少具有以下优点:
本发明中,由客户端计算防区的状态,服务端不需要负责所有防区的状态的计算,降低了服务端的负荷。
具体实施方式
本发明的核心思想是:通过订阅防区状态的客户端计算防区的状态,降低服务端计算防区状态的负荷。
下面结合附图和实施例详细介绍本发明提供的防区状态确定的方法。
首先以图1所示防区架构为例介绍服务端的改进。以防区A为例。
当没有客户端订阅或查看防区A的状态时,服务端不对防区A的状态进行计算。具体的,服务端可以接收防区A的告警源发送的告警,但是如果没有客户端订阅防区A的状态,服务端对防区A的告警不做处理。
当有客户端订阅防区A的状态时,服务端需要预先选择一个客户端作为防区A的状态的计算者,为该计算者订阅防区A的告警。计算者根据防区A的告警计算防区A的状态,存储计算得到的防区A的状态。当防区A的状态发生改变、或者之前没有存储防区A的状态,客户端将当前计算得到的防区A的状态向服务端发送。服务端记录防区A的状态,并向所有订阅防区A的状态的客户端发送。如果防区A的计算者由于网络状态或在其他原因,不再作为防区A的计算者,服务端重新选择订阅防区A的状态的客户端作为计算者。通常,该计算者是最先订阅防区A的状态的客户端。当然,该计算者也可以是随机选择或者其他设置的选择策略。
当服务端接收到客户端对防区A的状态的获取请求时,服务端首先确定当前是否已有其他客户端订阅了防区A的状态,如果没有,则将该客户端设置为防区A的状态的计算者,并为客户端订阅防区A的告警。如果已有其他客户端订阅了防区A的状态、且该客户端已经订阅了防区A的状态,则将记录的防区A的状态向该客户端发送,如果已有其他客户端订阅了防区A的状态、但该客户端尚未订阅防区A的状态,则为该客户端订阅防区A的状态,并将当前记录的防区A的状态向该客户端发送。
本发明中,该服务端具体可以为服务器或者其他类似服务功能的网络设备。
具体的,本发明实施例中,客户端获取防区A的状态的过程如图2所示,包括以下步骤:
步骤201,客户端向服务端发送获取防区A的状态的请求。
步骤202,服务端判断防区A的引用数是否大于1,如果防区A的引用数小于1,执行步骤203;否则,执行步骤207。
步骤203,服务端判定防区A第一次被客户端查看,需要计算防区A的状态。
步骤204,服务端标识客户端为计算者。
步骤205,服务端为客户端订阅防区A告警源的告警。
需要说明,该步骤为可选步骤。例如,客户端也可以周期性主动到服务端查询防区A的告警,服务端根据客户端的查询请求向客户端返回防区A的告警。
步骤206,客户端根据防区A的告警计算防区A的状态,并将计算得到的防区A的状态发送至服务端。
具体的,客户端根据预设策略将计算得到的防区A的状态发送至服务端,例如,客户端在第一次计算得到防区A的状态发送至服务端,和/或客户端在计算发现防区A的状态发生改变时将计算得到的防区A的状态发送至服务端。客户端还可以周期性将计算得到的防区A的状态发送至服务端,本发明实施例对此不做限制。
步骤207,服务端判断客户端是否已经订阅了防区A的状态;如果已经订阅了,则执行步骤208;如果没有订阅,执行步骤209。
步骤208,服务端查询记录的防区A的状态并向客户端反馈。
需要说明,该步骤可选。因为客户端已经订阅防区A的状态,服务端会将防区A的状态变更消息自动发送至客户端。当然,服务端也可以反馈当前记录的防区A的状态,并在后续将防区A的状态变更消息发送至客户端。
步骤209,服务端增加防区A的状态引用数。
步骤210,服务端为客户端订阅防区A的状态。
步骤211,服务端查询记录的防区A的状态并向客户端反馈。
需要说明,该步骤可选。因为客户端已经订阅防区A的状态,服务端会将防区A的状态变更消息自动发送至到客户端。当然,也可以设置客户端第一次订阅防区状态成功时,服务端自动将防区状态向客户端发送。
与图2所示过程相对应,本发明实施例中防区A的计算者变更过程如图3所示,假定计算者为客户端1,该过程包括:
步骤301,服务端发现客户端1离线、注销。
需要说明,服务端可以与计算者之间建立通信机制,用于确定计算者是否能够正常工作。例如,预设时间之内如果没有收到计算者的报文,服务端可以认为计算者无法正常工作,需要重新设置计算者。
步骤302,服务端将防区A的引用数减1,如果防区A的引用数变为0,则不再处理。
步骤303,服务端从防区A的剩余引用者中选择一个客户端2作为新的计算者。
选择策略可以是:随机选择或者剩余引用者中最先订阅防区A状态的客户端。
步骤304,服务端为客户端2订阅防区A的告警源的告警。
步骤305,客户端2根据告警计算防区A的状态,并在防区A的状态发生改变时,将新的防区A的状态反馈给服务端。
步骤306,服务端将防区A的状态广播给其他订阅客户端。
本发明中,由客户端计算防区的状态,服务端不需要负责所有防区的状态的计算,降低了服务端的负荷。
基于与上述方法实施例相同或相似的技术构思,本发明实施例提供了一种防区状态确定的设备,作为服务端应用于包括所述服务端、客户端与防区的***中,如图4所示,包括:
选择单元10,用于从订阅所述防区的状态的客户端中选择一个客户端作为所述防区的状态的计算者;
接收单元20,与所述选择单元10连接,用于接收并记录所述计算者根据所述防区的告警发送的所述防区的状态;
通知单元30,与所述接收单元20连接,用于在所述防区的状态发生改变时通知所述计算者之外的订阅所述防区的状态的客户端。
所述选择单元10具体用于:
将第一次订阅所述防区的状态的客户端、或者随机选择订阅所述防区的状态的一个客户端作为所述防区的状态的计算者。
如图5所示,该设备还包括订阅单元40,与所述选择单元10连接,用于为所述计算者订阅所述防区的告警;或者
如图6所示,该设备还包括发送单元50,用于根据所述计算者对所述防区的告警的查询请求,向所述计算者发送所述防区的告警。
所述选择单元10还用于:
当所述服务端接收到任意客户端对所述防区的状态的获取请求时,确定当前是否已有其他客户端订阅所述防区的状态;
如果当前没有其他客户端订阅所述防区的状态,将发送该获取请求的客户端作为所述防区的状态的计算者。
所述接收单元20还用于:接收任意客户端对所述防区的状态的获取请求;相应的,如图7所示,该设备还包括判断单元60,与所述接收单元20连接,用于判断发送该获取请求的客户端是否已经订阅所述防区的状态;所述订阅单元40还可以与所述判断单元60连接,用于如果发送该获取请求的客户端尚未订阅所述防区的状态,则为发送该获取请求的客户端订阅所述防区的状态。
所述通知单元30还用于:
如果发送该获取请求的客户端已经订阅所述防区的状态、或者所述服务端为发送该获取请求的客户端订阅所述防区的状态之后,将当前记录的所述防区的状态向发送该获取请求的客户端发送;和/或,在所述防区的状态发生改变时向发送该获取请求的客户端发送所述防区的状态。
所述选择单元10还用于:当所述计算者无法正常工作时,从所述计算者之外的订阅所述防区的状态的客户端中选择一个客户端作为新的计算者。
本发明中,由客户端计算防区的状态,服务端不需要负责所有防区的状态的计算,降低了服务端的负荷。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。