一种异步串行处理消息的方法及装置与流程

文档序号:16627546发布日期:2019-01-16 06:15阅读:161来源:国知局
一种异步串行处理消息的方法及装置与流程

本发明属于消息处理技术领域,具体涉及一种异步串行处理消息的方法及装置。



背景技术:

现有技术的消息处理方法包括同步消息处理和异步消息处理,对于同步消息处理,系统接收请求者发送的第一请求消息后,就开始处理,得到处理结果后将该结果返回给请求者,在返回结果前可能还会收到其他请求者发送的请求消息,这种情况下系统内部要同时处理多个请求消息,就涉及到临界资源的并发访问,需要对并发访问进行良好的管理,这可能需要大量的设计工作。而对于请求者来说再向系统发起一个请求后必须等系统处理完请求返回结果后才能继续执行其他操作,其等待时间较长。

对于异步消息处理,当有多条请求消息时,系统内接收请求者发送的第一请求消息、第二请求消息后,先把第一请求消息、第二请求消息缓存起来,之后,从缓存池里取出第一请求消息、第二请求消息进行处理,处理过程中,可能不是按照接收顺序进行的,可以是并发性处理,可能会对请求关联的模块的临界资源进行资源竞争,请求操作可能会消耗较长的时间,因此,该处理方法并不能保证是按照接收的先后顺序进行开始处理,造成从接收消息到处理完该消息处理的及时性较低,容易降低用户的体验度;而且,在设计程序时,需要对系统内部各个模块可能的并发性处理都要考虑到,需要对各个临界资源进行良好的模块化,系统内部设计较为复杂。



技术实现要素:

为了解决上述技术问题,本发明提供一种异步串行处理消息的方法及装置,可用于对多种消息的处理,避免了由于控制系统内临界资源并发访问而带来的设计复杂性,同时又不会由于第一消息没处理完而影响对第二消息的接收,整体上来说,也提高了对消息的处理效率,进一步提高了用户的体验度。

本发明采用如下技术方案:

一方面,本发明提供一种异步串行处理消息的方法,其包括以下步骤:

按照先后顺序分别接收包括第一请求消息、第二请求消息的请求消息;

将所述第一请求消息放到请求消息队列中的尾部,将所述第二请求消息放到请求消息队列中紧邻所述第一请求消息的后面,所述请求消息队列是先进先出队列;

从所述请求消息队列的头部提取出所述第一请求消息,并处理所述第一请求消息,得到第一回调消息;

所述从所述请求消息队列的头部提取出所述第一请求消息之后,将所述请求队列中的第二请求消息移动到该队列的头部位置;

从所述请求消息队列的头部提取出所述第二请求消息,并处理所述第二请求消息,得到第二回调消息。

另一方面,本发明还提供一种异步串行处理消息的装置,其包括:

接收模块,用于按照先后顺序分别接收包括第一请求消息、第二请求消息的请求消息;

第一放置模块,用于将所述第一请求消息放到请求消息队列中的尾部,将所述第二请求消息放到请求消息队列中紧邻所述第一请求消息的后面,所述请求消息队列是先进先出队列;

第一提取模块,用于从所述请求消息队列的头部提取出所述第一请求消息,并处理所述第一请求消息,得到第一回调消息;

第一移动模块,用于所述从所述请求消息队列的头部提取出所述第一请求消息之后,将所述请求队列中的第二请求消息移动到该队列的头部位置;

所述第一提取模块,还用于从所述请求消息队列的头部提取出所述第二请求消息,并处理所述第二请求消息,得到第二回调消息。

本发明实施例的异步串行处理消息的方法,通过将接收到的第一请求消息、第二请求消息放到请求消息队列中进行缓存,处理时,是按照接收顺序从请求消息队列的头部提取待处理的消息,即该方法通过先进先出的请求消息队列,保证了先接收到的消息先提取,并进行先处理;同时又不会由于第一消息没处理完而影响对第二消息的接收,降低了请求者的等待时间,整体上来说,提高了对消息的处理效率;另外,该方法是按照接收的先后顺序进行开始处理,提高了从接收消息到处理完该消息处理的及时性,也因此可以提高用户的体验度;而且,该方法是处理完第一请求消息后再处理第二请求消息的,不会产生并发性,对于请求者来说也不会造成堵塞现象,因此设计相关程序时,不用考虑并发性、堵塞等的发生,很大程度地简化了程序设计的工作量。

附图说明

图1为本发明一优选实施例中的异步串行处理消息的方法的流程图。

图2为本发明另一优选实施例中的异步串行处理消息的方法的部分流程图。

图3为本发明一优选实施例中的异步串行处理消息的装置的结构图。

图4为本发明另一优选实施例中的异步串行处理消息的装置的结构图。

图5为本发明另一优选实施例中的异步串行处理消息的装置的结构图。

图6为本发明又一优选实施例中的异步串行处理消息的装置的结构图。

具体实施方式

为了更加清楚地了解本发明的技术方案,下面结合附图对本发明进行详细介绍。本发明的实施例具有示例性的作用,本领域技术人员在本发明实施例基础上做出的无实质性的改进,都应属于本发明的保护范围。

如图1所示的异步串行处理消息的方法,其可用于服务器端,包括以下步骤:

s101:按照先后顺序分别接收包括第一请求消息、第二请求消息的请求消息。

为了方便描述,这里的第一请求消息、第二请求消息是紧挨着的两条请求消息,且是先接收第一请求消息,再接收第二请求消息。当然,接收到的请求消息中,也可以包括其他第三请求消息、第四请求消息等。

s102:将所述第一请求消息放到请求消息队列中的尾部,将所述第二请求消息放到请求消息队列中紧邻所述第一请求消息的后面,所述请求消息队列是先进先出队列。

接收到请求消息后,为了保证先接收到的请求消息先开始处理,后接收到的请求消息后开始处理,应按照接收请求消息的先后顺序,将请求消息先后放到请求消息队列中,且每次放置请求消息均是放置到请求消息队列中的尾部,以保证能够先提取队列中前面的请求消息。

s103:从所述请求消息队列的头部提取出所述第一请求消息,并处理所述第一请求消息,得到第一回调消息。

每次从请求消息队列中提取请求消息时,均是提取位于请求消息队列中头部位置的请求消息。

提取出第一请求消息后,可以根据需要处理该第一请求消息,并得到相应的处理结果,根据该结果生成第一回调消息。

s104:所述从所述请求消息队列的头部提取出所述第一请求消息之后,将所述请求队列中的第二请求消息移动到该队列的头部位置。

所述的请求消息队列可以类似于现实世界中的“排队”形成的队列,从头部位置提取请求消息之后,后面的请求消息便向前移动到该头部位置,以便于从该头部位置提取出该请求消息,依此下去,直到最后的请求消息移动到队列的头部位置,并从该头部位置提取该最后的请求消息之后,便是提取完成。

将第一请求消息放置到请求队列的尾部,并依次提取完该第一请求消息之前的其他请求消息之后,该第一请求消息便会移至该队列的头部位置,然后,便可以从所述请求消息队列的头部提取出所述第一请求消息。如果接收第一请求消息后,请求消息队列并没有其他请求消息,则将所述第一请求消息放到请求消息队列中的尾部,即是将所述第一请求消息放到请求消息队列中的头部。

s105:从所述请求消息队列的头部提取出所述第二请求消息,并处理所述第二请求消息,得到第二回调消息。

当所述第二请求消息位于请求队列的头部位置,便可以从该头部位取出除该第二请求消息,并根据相关条件处理该第二请求消息,得到相应结果,并根据该结果生成相应的第二回调消息。

本发明实施例的异步串行处理消息的方法,通过将接收到的第一请求消息、第二请求消息放到请求消息队列中进行缓存,处理时,是按照接收顺序从请求消息队列的头部提取待处理的消息,即该方法通过先进先出的请求消息队列,保证了先接收到的消息先提取,并进行先处理;同时又不会由于第一消息没处理完而影响对第二消息的接收,降低了请求者的等待时间,整体上来说,提高了对消息的处理效率;另外,该方法是按照接收的先后顺序进行开始处理,提高了从接收消息到处理完该消息处理的及时性,也因此可以提高用户的体验度;而且,该方法是处理完第一请求消息后再处理第二请求消息的,不会产生并发性,对于请求者来说也不会造成堵塞现象,因此设计相关程序时,不用考虑并发性、堵塞等的发生,很大程度地简化了程序设计的工作量。

基于图1所示的异步串行处理消息的方法,其中,所述从所述请求消息队列的头部取出所述第一请求消息之前,包括:

s201:判断所述请求消息队列的头部是否是所述第一请求消息。

s202:如果所述请求消息队列的头部不是所述第一请求消息,则从所述请求消息队列中提取位于该队列头部的请求消息,并处理该请求消息。

s203:所述从所述请求消息队列中提取位于该队列头部的请求消息之后,将所述请求队列中的全部请求消息按照顺序向该队列头部方向移动位置。

s204:再次判断所述请求消息队列的头部是否是所述第一请求消息。

按照上述的s201-s204,直到所述请求消息队列的头部是所述第一请求消息。利用该方法,可以保证在请求消息队列的头部不是所述第一请求消息时,将请求消息队列中第一消息之前的消息按照顺序提取出来,并将第一请求消息按照顺序移动到请求消息队列的头部,以确保所有提取出来的消息都是从请求消息队列的头部提取出来的,进一步确保了提取是按照先进先出的顺序进行。

基于图1所示的异步串行处理消息的方法,如图2所示,其还包括:

s301:将所述第一回调消息、第二回调消息分别放到与其对应的回调消息队列的尾部,所述回调消息队列是先进先出队列,且不同类型的回调消息对应不同的回调消息队列。

所述的回调消息队列也可以类似于现实世界中的“排队”形成的队列,从头部位置提取回调消息之后,后面的回调消息便向前移动到该头部位置,以便于从该头部位置提取出该回调消息,依此下去,直到最后的回调消息移动到队列的头部位置,并从该头部位置提取该最后的回调消息之后,便是提取完成。

可以根据实际情况将回调消息进行分类,例如可以分为:返回给浏览器端的浏览器回调消息队列、返回给客户端的客户端回调消息队列等。所述第一回调消息、第二回调消息若是同类型的回调消息,则可以按照生成的先后顺序,将所述第一回调消息、第二回调消息分别放到与其对应的同一回调消息队列的尾部(如:第二回调消息在第一回调消息的后面);所述第一回调消息、第二回调消息若不是同类型的回调消息,则可以按照生成的先后顺序,将所述第一回调消息、第二回调消息分别放到与其对应的不同回调消息队列的尾部。

另外,得到第一回调消息后直接放到对应回调消息队列的尾部,而不用等得到第二回调消息后一起放,同理,得到第二回调消息后也是直接放到对应回调消息队列的尾部,而不用等得到第一回调消息后一起放。

s302:从放置有第一回调消息的回调消息队列的头部提取出该第一回调消息,且从放置有第二回调消息的回调消息队列的头部提取出该第二回调消息。

若所述第一回调消息、第二回调消息在同一个回调消息队列,则可以按照先后顺序提取出这两条回调消息;若所述第一回调消息、第二回调消息不在同一个回调消息队列,则可以分别按照各自队列的顺序提取出这两条回调消息。

另外,对应的回调消息队列中存在第一回调消息时就提取,而不用等到其他回调消息都放进去后再提取。

s303:将提取出的第一回调消息发送给与其对应的请求者,将所述第二回调消息发送给与其对应的请求者。

提取出第一回调消息时就开始发送,而不用等到将全部回调消息提取后再发送。

该方法将第一回调消息、第二回调消息分别放到与其对应的回条消息队列的尾部,可以保证将回条消息发送给对应的请求者时,是按照回调消息队列中的先后顺序进行的,提高了从接收消息、处理消息、发送回调消息的及时性;同时,不同类型的回调消息对应不同的回调消息队列,可以保证不同类型的回调消息的提取、发送不受彼此的影响,进一步提高回调消息发送的效率。

基于图2所示的异步串行处理消息的方法,其中,所述从放置有第一回调消息的回调消息队列的头部提取出该第一回调消息之前,包括:

s401:判断放置有第一回调消息的回调消息队列的头部是不是所述第一回调消息;

s402:如果放置有第一回调消息的回调消息队列的头部不是所述第一回调消息,则从该回调消息队列的头部提取出位于该头部的回调消息;

s403:将放置有第一回调消息的回调消息队列中的全部回调消息按照顺序向该队列头部方向移动位置;

s404:再次判断放置有第一回调消息的回调消息队列的头部是不是所述第一回调消息;

且,

所述从放置有第二回调消息的回调消息队列的头部提取出该第二回调消息之前,包括:

s501:判断放置有第二回调消息的回调消息队列的头部是不是所述第二回调消息;

s502:如果放置有第二回调消息的回调消息队列的头部不是所述第二回调消息,则从该回调消息队列的头部提取出位于该头部的回调消息;

s503:将放置有第二回调消息的回调消息队列中的全部回调消息按照顺序向该队列头部方向移动位置;

s504:再次判断放置有第二回调消息的回调消息队列的头部是不是所述第二回调消息。

上述步骤s401-s404与步骤s501-s504,可以先后进行。利用该方法,可以保证放置有第一回调消息的回调消息队列的头部不是所述第一回调消息时,将该队列中第一回调消息之前的消息按照顺序提取出来,并将第一回调消息按照顺序移动到回调消息队列的头部,以确保所有提取出来的回调消息都是从回调消息队列的头部提取出来的,进一步确保了对回调消息的提取是按照先进先出的顺序;同理,也确保了对放置有第二回调消息的回调消息队列中的回调消息进行提取时是按照先进先出的顺序。

作为本发明异步串行处理消息方法的一种应用场景,在进行视频通话时,可以包括以下步骤(该实施例只是对其中的一种可能情况进行示例性说明):

s601:系统会先后收到请求开始视频通话、开始上传本地视频流、开始播放远端视频流、结束视频通话等请求消息;

s602:将收到的请求开始视频通话的请求消息缓存放到请求消息队列中的尾部,并将开始上传本地视频流、开始播放远端视频流、结束视频通话的请求消息依次缓存放在请求开始视频通话的请求消息后面,所述请求消息队列是先进先出队列;

s603:判断所述请求消息队列的头部是否是请求开始视频通话的请求消息;

s604:如果所述请求消息队列的头部不是请求开始视频通话的请求消息,则从所述请求消息队列中提取位于该队列头部的请求消息,并处理该请求消息;

s605:所述从所述请求消息队列中提取位于该队列头部的请求消息之后,将所述请求队列中的全部请求消息按照顺序向该队列头部方向移动位置;

s606:再次判断所述请求消息队列的头部是否是请求开始视频通话的请求消息;

s607:如果所述请求消息队列的头部是请求开始视频通话的请求消息,则从所述请求消息队列的头部提取出请求开始视频通话的请求消息,处理该请求开始视频通话的请求消息,并得到请求开始视频通话的回调消息;

s608:将所述请求开始视频通话的回调消息放在对应回调消息队列的尾部;

s609:判断放置有请求开始视频通话的回调消息的回调消息队列的头部是不是所述请求开始视频通话的回调消息;

s610:如果放置有请求开始视频通话的回调消息的回调消息队列的头部不是所述请求开始视频通话的回调消息,则从该回调消息队列的头部提取出位于该头部的回调消息;

s611:将放置有请求开始视频通话的回调消息的回调消息队列中的全部回调消息按照顺序向该队列头部方向移动位置;

s612:再次判断放置有请求开始视频通话的回调消息的回调消息队列的头部是不是所述第一回调消息;

s613:如果放置有请求开始视频通话的回调消息的回调消息队列的头部是所述请求开始视频通话的回调消息,则从放置有请求开始视频通话的回调消息的回调消息队列的头部提取出该回调消息;

s613:将提取出的请求开始视频通话的回调消息发送给与其对应的请求者;

按照s603-s613的步骤,依次处理开始上传本地视频流、开始播放远端视频流、结束视频通话等请求消息。

作为本发明异步串行处理消息方法的另一种应用场景,在网络聊天室中聊天时,可以包括以下步骤(该实施例只是对其中的一种可能情况进行示例性说明):

s701:系统会先后收到用户请求加入聊天室、用户请求退出聊天室等请求消息;

s702:系统将收到的用户请求加入聊天室的请求消息缓存放到请求消息队列中的尾部,并将用户请求退出聊天室的请求消息缓存放在用户请求加入聊天室的请求消息后面,所述请求消息队列是先进先出队列;

s703:判断所述请求消息队列的头部是否是用户请求加入聊天室的请求消息;

s704:如果所述请求消息队列的头部是用户请求加入聊天室的请求消息,则从所述请求消息队列的头部提取出用户请求加入聊天室的请求消息,并处理该用户请求加入聊天室的请求消息,得到用户请求加入聊天室的回调消息;

s705:将所述请求加入聊天室的回调消息放在对应回调消息队列的尾部;

s706:判断放置有请求加入聊天室的回调消息的回调消息队列的头部是不是所述请求加入聊天室的回调消息;

s707:如果放置有请求加入聊天室的回调消息的回调消息队列的头部是所述请求加入聊天室的回调消息,则从放置有请求加入聊天室的回调消息的回调消息队列的头部提取出该回调消息;

s708:将提取出的放置有请求加入聊天室的回调消息发送给与其对应的请求者;

按照s703-s708的步骤,处理用户请求退出聊天室等请求消息。

上述两个应用场景中的回调消息队列可以分为两个类型,即是不同的两个回调消息队列,服务器处理这两个回调消息队列时互不影响。

如图3所示的异步串行处理消息的装置,其包括:

接收模块,用于按照先后顺序分别接收包括第一请求消息、第二请求消息的请求消息;

第一放置模块,用于将所述第一请求消息放到请求消息队列中的尾部,将所述第二请求消息放到请求消息队列中紧邻所述第一请求消息的后面,所述请求消息队列是先进先出队列;

第一提取模块,用于从所述请求消息队列的头部提取出所述第一请求消息,并处理所述第一请求消息,得到第一回调消息;

第一移动模块,用于所述从所述请求消息队列的头部提取出所述第一请求消息之后,将所述请求队列中的第二请求消息移动到该队列的头部位置;

所述第一提取模块,还用于从所述请求消息队列的头部提取出所述第二请求消息,并处理所述第二请求消息,得到第二回调消息。

本发明实施例的异步串行处理消息的装置可以实现上述的异步串行处理消息的方法,其通过将接收到的第一请求消息、第二请求消息放到请求消息队列中进行缓存,处理时,是按照接收顺序从请求消息队列的头部提取待处理的消息,即该方法通过先进先出的请求消息队列,保证了先接收到的消息先提取,并进行先处理;同时又不会由于第一消息没处理完而影响对第二消息的接收,降低了请求者的等待时间,整体上来说,提高了对消息的处理效率;另外,该装置是按照接收的先后顺序进行开始处理,提高了从接收消息到处理完该消息处理的及时性,也因此可以提高用户的体验度;而且,该装置是处理完第一请求消息后再处理第二请求消息的,不会产生并发性,对于请求者来说也不会造成堵塞现象,因此设计相关程序时,不用考虑并发性、堵塞等的发生,很大程度地简化了程序设计的工作量。

基于图3所示的异步串行处理消息的装置,如图4所示,其还包括:

第一判断模块,用于从所述请求消息队列的头部取出所述第一请求消息之前,判断所述请求消息队列的头部是否是所述第一请求消息;

所述第一提取模块,还用于如果所述请求消息队列的头部不是所述第一请求消息,则从所述请求消息队列中提取位于该队列头部的请求消息,并处理该请求消息;

所述第一移动模块,还用于所述从所述请求消息队列中提取位于该队列头部的请求消息之后,将所述请求队列中的全部请求消息按照顺序向该队列头部方向移动位置;

所述第一判断模块,还用于再次判断所述请求消息队列的头部是否是所述第一请求消息。

基于图4所示的异步串行处理消息的装置,如图5所示,还包括:

第二放置模块,用于将所述第一回调消息、第二回调消息分别放到与其对应的回调消息队列的尾部,所述回调消息队列是先进先出队列,且不同类型的回调消息对应不同的回调消息队列;

第二提取模块,用于从放置有第一回调消息的回调消息队列的头部提取出该第一回调消息,且从放置有第二回调消息的回调消息队列的头部提取出该第二回调消息;

发送模块,用于将提取出的第一回调消息发送给与其对应的请求者,将所述第二回调消息发送给与其对应的请求者。

该装置将第一回调消息、第二回调消息分别放到与其对应的回条消息队列的尾部,可以保证将回条消息发送给对应的请求者时,是按照回调消息队列中的先后顺序进行的,提高了从接收消息、处理消息、发送回调消息的及时性;同时,不同类型的回调消息对应不同的回调消息队列,可以保证不同类型的回条消息的提取、发送不受彼此的影响,进一步提高回调消息发送的效率。

基于图5所示的异步串行处理消息的装置,如图6所示,其还包括:

第二判断模块,用于所述从放置有第一回调消息的回调消息队列的头部提取出该第一回调消息之前,判断放置有第一回调消息的回调消息队列的头部是不是所述第一回调消息;

所述第二提取模块,还用于如果放置有第一回调消息的回调消息队列的头部不是所述第一回调消息,则从该回调消息队列的头部提取出位于该头部的回调消息;

第二移动模块,用于将放置有第一回调消息的回调消息队列中的全部回调消息按照顺序向该队列头部方向移动位置;

所述第二判断模块,还用于再次判断放置有第一回调消息的回调消息队列的头部是不是所述第一回调消息;

且,

所述第二判断模块,还用于所述从放置有第二回调消息的回调消息队列的头部提取出该第二回调消息之前,判断放置有第二回调消息的回调消息队列的头部是不是所述第二回调消息;

所述第二提取模块,还用于如果放置有第二回调消息的回调消息队列的头部不是所述第二回调消息,则从该回调消息队列的头部提取出位于该头部的回调消息;

所述第二移动模块,还用于将放置有第二回调消息的回调消息队列中的全部回调消息按照顺序向该队列头部方向移动位置;

所述第二判断模块,还用于再次判断放置有第二回调消息的回调消息队列的头部是不是所述第二回调消息。

利用该装置,可以保证放置有第一回调消息的回调消息队列的头部不是所述第一回调消息时,将该队列中第一回调消息之前的消息按照顺序提取出来,并将第一回调消息按照顺序移动到回调消息队列的头部,以确保所有提取出来的回调消息都是从回调消息队列的头部提取出来的,进一步确保了对回调消息的提取是按照先进先出的顺序;同理,也确保了对放置有第二回调消息的回调消息队列中的回调消息进行提取时是按照先进先出的顺序。

以上所述,仅为本发明的实施例,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1