本发明涉及通信技术领域,尤其涉及一种基于模块集群解耦的消息分发方法、装置、电子设备及存储介质。
背景技术:
随着数据处理与网络聊天具有越来越广泛的应用,有效且快速的对不同种类的消息进行分发具有重要意义。
现有技术将大量的消息都放在一个类中接收,再使用代理的方式传递到控制器,采用这种方法,模块之间的耦合度强。更多的,随着消息的种类的增加,程序包含了大量的模块,当需要改动其中部分模块的功能时,由于耦合度强,将会导致其他模块也发生改动,从而容易出现冲突的现象。
技术实现要素:
本发明的主要目的在于提供一种基于模块集群解耦的消息分发方法、装置、电子设备及存储介质,旨在降低模块之间的耦合度。
为实现上述目的,本发明实施例第一方面提供一种基于模块集群解耦的消息分发方法,包括:
创建与所述模块数量相等数量的插件;
将各所述插件分别与各所述模块绑定,各所述插件分别遵守不同的预设协议,各所述预设协议内均包括消息筛选函数,所述消息筛选函数用于筛选出对应模块内预设消息类型的消息;
当接收到消息时,识别所述消息的消息类型,并根据各所述插件遵守的消息筛选函数,分发消息给目标插件,所述目标插件遵守的预设协议内的消息筛选函数,筛选出所述消息。
进一步地,所述预设协议为与其对应的插件所绑定的模块中实现的功能函数。
进一步地,所述根据各所述插件遵守的消息拦截函数,分发消息给目标插件包括:
调用各所述插件遵守的消息筛选函数,筛选出对应的各所述模块内预设消息类型的消息;
将所述消息分发给所述目标插件。
进一步地,所述将各所述插件分别与各所述模块绑定之后,包括:
判断各所述插件中是否存在空插件;
若不存在插件为空插件,则获取插件管理器,添加各所述插件至所述插件管理器。
进一步地,所述根据各所述插件遵守的消息筛选函数,分发消息给各所述插件之前,包括:
遍历所述插件管理器;
获取所述插件管理器内遵守消息筛选函数的插件。
进一步地,所述将各所述插件分别与各所述模块绑定包括:
在各所述模块的头文件中声明各所述模块绑定的插件所遵守的预设协议。
进一步地,所述方法还包括:
若存在插件为空插件,则输出所述插件为空插件的提示信息。
本发明实施例第二方面提供一种基于模块集群解耦的消息分发装置,包括:
创建模块,用于创建与所述模块数量相等数量的插件;
绑定模块,用于将各所述插件分别与各所述模块绑定,各所述插件分别遵守不同的预设协议,各所述预设协议内均包括消息筛选函数,所述消息筛选函数用于筛选出对应模块内预设消息类型的消息;
识别模块,用于当接收到消息时,识别所述消息的消息类型;
分发模块,用于根据各所述插件遵守的消息筛选函数,分发消息给各所述插件。
本发明实施例第三方面提供了一种电子设备,包括:
存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现本发明实施例第一方面提供的基于模块集群解耦的消息分发方法。
本发明实施例第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例第一方面提供的基于模块集群解耦的消息分发方法。
从上述本发明实施例可知,本发明提供的模块解耦方法、装置、终端及存储介质,通过创建插件,将各插件分别与各模块绑定,各插件分别遵守不同的预设协议,各预设协议内均包括消息筛选函数,该消息筛选函数可筛选出对应模块内预设消息类型的消息,当接收到消息时,识别该消息的消息类型,并根据各插件遵守的消息筛选函数,分发消息给各插件,通过创建插件,以插件的形式分发消息,可降低模块间的解耦度,避免模块之间发送冲突。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明第一实施例提供的基于模块集群解耦的消息分发方法的流程示意图;
图2为本发明第二实施例提供的基于模块集群解耦的消息分发方法的流程示意图;
图3为本发明第三实施例提供的基于模块集群解耦的消息分发装置的结构示意图;
图4示出了一种电子设备的硬件结构图。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
耦合度是程序结构中各个模块之间的相互关联的度量。
请参阅图1,图1为本发明第一实施例提供的基于模块集群解耦的消息分发方法的流程示意图,该模块集群包括多个模块,该方法包括以下步骤:
s101、创建与模块数量相等数量的插件;
插件是指一种计算机应用程序,它和主应用程序互相交互,来为主应用程序提供特定的功能。
模块是指可组成系统的、具有某种确定独立功能的半自律性子系统,其能够被单独命名并独立地完成一定功能的程序语句的集合,每一个模块实现一个特定的功能。例如,头像创建模块实现创建头像的功能,数据下载模块实现下载数据的功能等。
s102、将各插件分别与各模块绑定,各插件分别遵守不同的预设协议,各预设协议内均包括消息筛选函数,该消息筛选函数用于筛选出对应模块内预设消息类型的消息;
该预设协议为该预设协议对应的插件所绑定的模块中需要实现的功能函数,例如,消息接收函数hasreceivedmessage,用于接收消息,消息筛选函数receivedmessagematcharray,用于筛选出符合预设类型的消息,消息发送函数willsendmessage,用于发送消息。协议的文件类型可以为dysocketpluginprotocol。
其中,所有的模块均需要实现消息筛选函数。因此,与各模块绑定的各插件所遵守的预设协议中均包括消息筛选函数。各模块内均预先设置有可接收的消息的消息类型,不同模块内可接收的消息类型有所不同。例如,头像创建模块只接收创建头像的消息。
s103、当接收到消息时,识别该消息的消息类型,并根据各插件遵守的消息筛选函数,分发消息给目标插件,该目标插件遵守的预设协议内的消息筛选函数,筛选出该消息。
当收到消息时,分析该消息,确定该消息的消息类型,调用各插件遵守的消息筛选函数,由于各模块内均预先设置有可接收消息的消息类型,因此各消息筛选函数可筛选出不同类型的消息,将消息发送给目标插件。目标插件遵守的预设协议内的消息筛选函数可筛选出该消息。即将各模块内符合其预先设置可接收的消息类型的消息发送给与该模块绑定的插件。
在本发明实施例中,通过创建插件,将各插件分别与各模块绑定,各插件分别遵守不同的预设协议,各预设协议内均包括消息筛选函数,该消息筛选函数可筛选出对应模块内预设消息类型的消息,当接收到消息时,识别该消息的消息类型,并根据各插件遵守的消息筛选函数,分发消息给各插件,通过创建插件,以插件的形式分发消息,可降低模块间的解耦度,避免模块之间发生冲突。
请参阅图2,图2为本发明第二实施例提供的基于模块集群解耦的消息分发方法的流程示意图,该方法包括以下步骤:
s201、创建与模块数量相等数量的插件;
s202、将各插件分别与各模块绑定,各插件分别遵守不同的预设协议,各预设协议内均包括消息筛选函数,该消息筛选函数用于筛选出对应模块内预设消息类型的消息;
在各模块的头文件中声明各模块绑定的插件所遵守的预设协议,该协议为与其对应的插件所绑定的模块中实现的功能函数,即根据模块需要实现的函数的不同,模块遵守的协议也有所不同。各预设协议内均包括消息筛选函数,该消息筛选函数用于筛选出对应模块内预设消息类型的消息。
更多的,插件内包含与其绑定的模块的功能函数的声明与实现,可将需要被自己的子类、父类或本类使用的功能函数放在插件的头文件中,便于解耦。
s203、判断各插件中是否存在空插件;
若不存在插件为空插件,则执行步骤s204:获取插件管理器,添加各插件至插件管理器。若存在插件为空插件,则执行步骤s205:输出插件为空插件的提示信息。
具体的,若不存在空插件,即所有插件都为有效插件,则获取插件管理器,该插件管理器可以为pluginsarray,将插件管理器内不存在的插件,添加到插件管理器中,插件管理器内已存在的插件则无需再次添加。若存在空插件,则在控制台打印该插件为空插件的提示信息,告知开发者当前将一个空插件添加到插件管理器中了,及时提醒开发者。
s206、当接收到消息时,识别该消息的消息类型;
在本发明实施例中,消息类型具体可为头像创建消息、数据下载消息等等。由于识别消息的消息类型为现有技术,故此处不再赘述。
s207、遍历插件管理器,获取插件管理器内遵守消息筛选函数的插件;
具体的,socket管理器可接收消息,由于socket管理器可获取插件管理器内的插件信息,因此,socket管理器遍历插件管理器内各个插件,筛选出遵守消息筛选函数receivedmessagematcharray的插件。
s208、调用各插件遵守的消息筛选函数,筛选出对应的各模块内预设消息类型的消息;
调用插件遵守的消息筛选函数,将接收的消息从socket消息管理器中传递到插件管理器中,由插件管理器内的插件对消息进行分发。由于各模块内预设通过的消息类型不同,因此,将消息分发给各个插件,实现在模块解耦条件下的消息分发。
s209、将该消息分发给对应的插件。
在本发明实施例中,通过创建插件,将各插件分别与各模块绑定,各插件分别遵守不同的预设协议,各预设协议内均包括消息筛选函数,该消息筛选函数可筛选出对应模块内预设消息类型的消息,当接收到消息时,识别该消息的消息类型,并根据各插件遵守的消息筛选函数,分发消息给各插件,通过创建插件,以插件的形式分发消息,可降低模块间的解耦度,避免模块之间发生冲突。
请参阅图3,图3为本发明第三实施例提供的基于模块集群解耦的消息分发装置的结构示意图,该装置包括:
创建模块301、绑定模块302、识别模块303和分发模块304。
创建模块301,用于创建与模块数量相等数量的插件。
插件是指一种计算机应用程序,它和主应用程序互相交互,来为主应用程序提供特定的功能。
模块是指可组成系统的、具有某种确定独立功能的半自律性子系统,其能够被单独命名并独立地完成一定功能的程序语句的集合,每一个模块实现一个特定的功能。例如,头像创建模块实现创建头像的功能,数据下载模块实现下载数据的功能等。
绑定模块302,用于将各插件分别与各模块绑定,各插件分别遵守不同的预设协议,各预设协议内均包括消息筛选函数,该消息筛选函数用于筛选出对应模块内预设消息类型的消息。
该预设协议为该预设协议对应的插件所绑定的模块中需要实现的功能函数,例如,消息接收函数hasreceivedmessage、消息筛选函数receivedmessagematcharray、消息发送函数willsendmessage。协议的文件类型可以为dysocketpluginprotocol。
其中,所有的模块均需要实现消息筛选函数。因此,与各模块绑定的各插件所遵守的预设协议中均包括消息筛选函数。各模块内均预先设置有可接收的消息的消息类型,不同模块内可接收的消息类型有所不同。例如,头像创建模块只接收创建头像的消息。
在各模块的头文件中声明各模块绑定的插件所遵守的预设协议,该协议为与其对应的插件所绑定的模块中实现的功能函数,即根据模块需要实现的函数的不同,模块遵守的协议也有所不同。各预设协议内均包括消息筛选函数,该消息筛选函数用于筛选出对应模块内预设消息类型的消息。
更多的,插件内包含与其绑定的模块的功能函数的声明与实现,可将需要被自己的子类、父类或本类使用的功能函数放在插件的头文件中,便于解耦。
进一步地,判断各插件中是否存在空插件。若不存在插件为空插件,则获取插件管理器,添加各插件至插件管理器。若存在插件为空插件,则输出插件为空插件的提示信息。
具体的,若不存在空插件,即所有插件都为有效插件,则获取插件管理器,该插件管理器可以为pluginsarray,将插件管理器内不存在的插件,添加到插件管理器中,插件管理器内已存在的插件则无需再次添加。若存在空插件,则在控制台打印该插件为空插件的提示信息,告知开发者当前将一个空插件添加到插件管理器中了,及时提醒开发者。
识别模块303,用于当接收到消息时,识别消息的消息类型。
在本发明实施例中,消息类型具体可为头像创建消息、数据下载消息等等。由于识别消息的消息类型为现有技术,故此处不再赘述。
分发模块304,用于根据各插件遵守的消息筛选函数,分发消息给各插件。
具体的,socket管理器可接收消息,由于socket管理器可获取插件管理器内的插件信息,因此,socket管理器遍历插件管理器内各个插件,筛选出遵守消息筛选函数receivedmessagematcharray的插件。
调用插件遵守的消息筛选函数,将接收的消息从socket消息管理器中传递到插件管理器中,由插件管理器内的插件对消息进行分发。由于各模块内预设通过的消息类型不同,因此,将消息分发给各个插件,实现在模块解耦条件下的消息分发。
在本发明实施例中,通过创建插件,将各插件分别与各模块绑定,各插件分别遵守不同的预设协议,各预设协议内均包括消息筛选函数,该消息筛选函数可筛选出对应模块内预设消息类型的消息,当接收到消息时,识别该消息的消息类型,并根据各插件遵守的消息筛选函数,分发消息给各插件,通过创建插件,以插件的形式分发消息,可降低模块间的解耦度,避免模块之间发生冲突。
请参见图4,图4示出了一种电子设备的硬件结构图。
本实施例中所描述的电子设备,包括:
存储器41、处理器42及存储在存储器41上并可在处理器上运行的计算机程序,处理器执行该程序时实现前述图1所示实施例中描述的基于模块集群解耦的消息分发方法。
进一步地,该电子设备还包括:
至少一个输入设备43;至少一个输出设备44。
上述存储器41、处理器42输入设备43和输出设备44通过总线45连接。
其中,输入设备43具体可为摄像头、触控面板、物理按键或者鼠标等等。输出设备44具体可为显示屏。
存储器41可以是高速随机存取记忆体(ram,randomaccessmemory)存储器,也可为非不稳定的存储器(non-volatilememory),例如磁盘存储器。存储器41用于存储一组可执行程序代码,处理器42与存储器41耦合。
进一步地,本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是设置于上述各实施例中的终端中,该计算机可读存储介质可以是前述图4所示实施例中的存储器。该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现前述图1所示实施例中描述的基于模块集群解耦的消息分发方法。进一步地,该计算机可存储介质还可以是u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上为对本发明所提供的一种基于模块集群解耦的消息分发方法、装置、电子设备及存储介质的描述,对于本领域的技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。