CN107911484B - 一种消息处理的方法及装置 - Google Patents
一种消息处理的方法及装置 Download PDFInfo
- Publication number
- CN107911484B CN107911484B CN201711326101.8A CN201711326101A CN107911484B CN 107911484 B CN107911484 B CN 107911484B CN 201711326101 A CN201711326101 A CN 201711326101A CN 107911484 B CN107911484 B CN 107911484B
- Authority
- CN
- China
- Prior art keywords
- client connection
- current
- client
- message
- buffer pool
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003672 processing method Methods 0.000 title description 5
- 238000000034 method Methods 0.000 claims abstract description 32
- 238000004806 packaging method and process Methods 0.000 claims abstract description 20
- 238000012545 processing Methods 0.000 claims abstract description 20
- 238000007726 management method Methods 0.000 claims description 3
- 238000013468 resource allocation Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000012858 packaging process Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/55—Push-based network services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/12—Avoiding congestion; Recovering from congestion
- H04L47/125—Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/622—Queue service order
- H04L47/623—Weighted service order
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/70—Admission control; Resource allocation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明提供了一种消息处理的方法及装置,该方法,包括:确定至少一个客户订阅的至少一个主题;针对每个主题,确定订阅当前主题的每个客户对应的针对当前主题的客户连接;为每个客户连接设置客户连接缓冲池;周期性地分别获取每个主题的消息;针对每个主题,执行:确定当前主题对应的至少一个客户连接;将获取的当前主题的消息存储到至少一个客户连接对应的至少一个客户连接缓冲池中;从至少一个客户连接缓冲池中获取消息;分别将位于同一个客户连接缓冲池中的消息进行组包,生成每个客户连接缓冲池对应的待推送的数据包;分别将每个客户连接缓冲池对应的待推送的数据包,推送给对应的客户连接。本发明能够降低资源的消耗。
Description
技术领域
本发明涉及网络技术领域,特别涉及一种消息处理的方法及装置。
背景技术
随着网络技术的快速发展,用户获取消息的方式也越来越多。其中,用户通过订阅获取需要的消息是一种常用的方式。
现有技术中,用户订阅需要的消息,当找到用户订阅的消息后,逐条向用户推送消息。具体地,对每条消息进行打包,打包后逐条发送给用户。
通过上述描述可见,现有技术中,需要对每个消息进行打包和发送,需要消耗大量的资源。
发明内容
本发明实施例提供了一种消息处理的方法及装置,能够降低资源的消耗。
一方面,本发明实施例提供了一种消息处理的方法,包括:
确定至少一个客户订阅的至少一个主题;
针对每个所述主题,确定订阅当前主题的每个客户对应的针对所述当前主题的客户连接;
为每个所述客户连接设置客户连接缓冲池;
周期性地分别获取每个所述主题的消息;
针对每个所述主题,执行:确定当前主题对应的至少一个客户连接;将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中;
从所述至少一个客户连接缓冲池中获取消息;
分别将位于同一个所述客户连接缓冲池中的消息进行组包,生成每个所述客户连接缓冲池对应的待推送的数据包;
分别将每个所述客户连接缓冲池对应的待推送的数据包,推送给对应的客户连接。
进一步地,
该方法进一步包括:
针对每个所述客户连接设置推送权重;
所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中,包括:
针对所述至少一个客户连接中的每个所述客户连接,执行:
确定当前客户连接对应的推送权重;
根据所述当前客户连接对应的推送权重,确定需要向所述当前客户连接推送的所述当前主题的消息;
将需要向所述当前客户连接推送的所述当前主题的消息存储到对应的客户连接缓冲池中。
进一步地,
所述确定当前客户连接对应的推送权重,包括:
接收所述当前客户连接对应的客户输入的初始推送权重;
确定所述当前客户连接对应的客户的接收速率;
根据所述接收速率对所述初始推送权重进行调整,生成所述当前客户连接对应的推送权重。
进一步地,
该方法进一步包括:
预先设置至少一个任务队列,并为每个所述任务队列分配推送线程;
在所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中之后,进一步包括:
针对所述至少一个客户连接中的每个所述客户连接生成待处理任务,其中,所述待处理任务中包括待处理的客户连接的信息;
将至少一个所述待处理任务分配给所述至少一个任务队列;
所述从所述至少一个客户连接缓冲池中获取消息,包括:
针对每个所述推送线程,执行:利用当前推送线程,从所述当前推送线程对应的任务队列中获取所述待处理任务,根据所述待处理任务中待处理的客户连接的信息,确定出所述待处理的客户连接,从所述待处理的客户连接对应的客户连接缓冲池中获取消息;
所述分别将位于同一个所述客户连接缓冲池中的消息进行组包,生成每个所述客户连接缓冲池对应的待推送的数据包,包括:
针对每个所述推送线程,执行:利用所述当前推送线程,将所述待处理的客户连接对应的客户连接缓冲池中的消息进行组包,生成当前待推送的数据包;
所述分别将每个所述客户连接缓冲池对应的待推送的数据包,推送给对应的客户连接,包括:
针对每个所述推送线程,执行:利用所述当前推送线程,将所述当前待推送的数据包推送给所述待处理的客户连接。
进一步地,
该方法进一步包括:预先设置至少一个获取线程,所述至少一个获取线程用于执行所述分别获取每个所述主题的消息;
进一步包括:
实时判断所述至少一个获取线程当前次获取的消息的数量与至少一个所述推送线程当前次推送的消息的数量之差是否大于等于第一预设值,如果是,则将没有休眠的至少一个所述获取线程中的第二预设值个所述获取线程休眠。
另一方面,本发明实施例提供了一种消息处理的装置,包括:
服务管理模块,用于确定至少一个客户订阅的至少一个主题;针对每个所述主题,确定订阅当前主题的每个客户对应的针对所述当前主题的客户连接;为每个所述客户连接设置客户连接缓冲池;
消息获取模块,用于周期性地分别获取每个所述主题的消息;针对每个所述主题,执行:确定当前主题对应的至少一个客户连接;将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中;
消息推送模块,用于从所述至少一个客户连接缓冲池中获取消息;分别将位于同一个所述客户连接缓冲池中的消息进行组包,生成每个所述客户连接缓冲池对应的待推送的数据包;分别将每个所述客户连接缓冲池对应的待推送的数据包,推送给对应的客户连接。
进一步地,
该装置进一步包括:频率设置模块,用于针对每个所述客户连接设置推送权重;
所述消息获取模块,在执行所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中时,具体用于:
针对所述至少一个客户连接中的每个所述客户连接,执行:
确定当前客户连接对应的推送权重;
根据所述当前客户连接对应的推送权重,确定需要向所述当前客户连接推送的所述当前主题的消息;
将需要向所述当前客户连接推送的所述当前主题的消息存储到对应的客户连接缓冲池中。
进一步地,
所述消息获取模块,在执行所述确定当前客户连接对应的推送权重时,具体用于:
接收所述当前客户连接对应的客户输入的初始推送权重;
确定所述当前客户连接对应的客户的接收速率;
根据所述接收速率对所述初始推送权重进行调整,生成所述当前客户连接对应的推送权重。
进一步地,
该装置进一步包括:
队列设置模块,用于设置至少一个任务队列,并为每个所述任务队列分配推送线程;
所述消息获取模块,用于在所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中之后,执行:
针对所述至少一个客户连接中的每个所述客户连接生成待处理任务,其中,所述待处理任务中包括待处理的客户连接的信息;将至少一个所述待处理任务分配给所述至少一个任务队列;
所述消息推送模块,用于执行:
针对每个所述推送线程,执行:
利用当前推送线程,从所述当前推送线程对应的任务队列中获取所述待处理任务,根据所述待处理任务中待处理的客户连接的信息,确定出所述待处理的客户连接,从所述待处理的客户连接对应的客户连接缓冲池中获取消息;
利用所述当前推送线程,将所述待处理的客户连接对应的客户连接缓冲池中的消息进行组包,生成当前待推送的数据包;
利用所述当前推送线程,将所述当前待推送的数据包推送给所述待处理的客户连接。
进一步地,
该装置进一步包括:
线程设置模块,用于设置至少一个获取线程,所述至少一个获取线程用于执行所述分别获取每个所述主题的消息;
进一步包括:
资源分配模块,用于实时判断所述至少一个获取线程当前次获取的消息的数量与至少一个所述推送线程当前次推送的消息的数量之差是否大于等于第一预设值,如果是,则将没有休眠的至少一个所述获取线程中的第二预设值个所述获取线程休眠。
在本发明实施例中,为每个客户连接设置一个客户连接缓冲池,将每个客户连接对应的消息存储在对应的客户连接缓冲池中,将客户连接缓冲池中的消息统一进行组包,生成待推送的数据包,将整个待推送的数据包推送给对应的客户连接,也就是说,不用一条一条的打包消息,可以将客户连接缓冲池中的消息整体进行打包,减少了打包的次数,节省了打包过程消耗的资源,也不用一条一条的推送消息,可以将客户连接缓冲池中的消息整体推送,减少了推送的次数,节省了推送过程消耗的资源,总之,本发明实施例降低了资源的消耗。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的一种消息处理的方法的流程图;
图2是本发明一实施例提供的另一种消息处理的方法的流程图;
图3是本发明一实施例提供的一种消息处理的装置的示意图;
图4是本发明一实施例提供的另一种消息处理的装置的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种消息处理的方法,该方法可以包括以下步骤:
步骤101:确定至少一个客户订阅的至少一个主题;
步骤102:针对每个所述主题,确定订阅当前主题的每个客户对应的针对所述当前主题的客户连接;
步骤103:为每个所述客户连接设置客户连接缓冲池;
步骤104:周期性地分别获取每个所述主题的消息;
步骤105:针对每个所述主题,执行:确定当前主题对应的至少一个客户连接;将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中;
步骤106:从所述至少一个客户连接缓冲池中获取消息;
步骤107:分别将位于同一个所述客户连接缓冲池中的消息进行组包,生成每个所述客户连接缓冲池对应的待推送的数据包;
步骤108:分别将每个所述客户连接缓冲池对应的待推送的数据包,推送给对应的客户连接。
在本发明实施例中,为每个客户连接设置一个客户连接缓冲池,将每个客户连接对应的消息存储在对应的客户连接缓冲池中,将客户连接缓冲池中的消息统一进行组包,生成待推送的数据包,将整个待推送的数据包推送给对应的客户连接,也就是说,不用一条一条的打包消息,可以将客户连接缓冲池中的消息整体进行打包,减少了打包的次数,节省了打包过程消耗的资源,也不用一条一条的推送消息,可以将客户连接缓冲池中的消息整体推送,减少了推送的次数,节省了推送过程消耗的资源,总之,本发明实施例降低了资源的消耗。
在本发明实施例中,同一个客户可以订阅多个主题,同一个主题可以被多个客户订阅。对于每个主题来说,可以对应多个客户连接,具体地,每个订阅该主题的客户存在一个针对该主题的客户连接。对于每个客户来说,可以对应多个客户连接,具体地,该客户订阅的每个主题都存在一个针对该客户的客户连接。
在获取各个主题的消息时,可以从数据库中搜索,也可以从网络中搜索。举例来说,可以以主题的名称确定搜索的关键词,按照该关键词进行搜索。
在本发明一实施例中,该方法进一步包括:
针对每个所述客户连接设置推送权重;
所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中,包括:
针对所述至少一个客户连接中的每个所述客户连接,执行:
确定当前客户连接对应的推送权重;
根据所述当前客户连接对应的推送权重,确定需要向所述当前客户连接推送的所述当前主题的消息;
将需要向所述当前客户连接推送的所述当前主题的消息存储到对应的客户连接缓冲池中。
由于不同的用户对应消息的推送权重是不同的,举例来说,客户A订阅了主题A和主题B,客户A更加喜欢主题A,希望能够频繁的接收到关于主题A的消息,这时,对于客户A来说可以设置主题A对应的客户连接的推送权重高于主题B对应的客户连接的推送权重。
在本发明实施例中,在执行根据所述当前客户连接对应的推送权重,确定需要向所述当前客户连接推送的所述当前主题的消息时,具体可以通过以下方式实现:可以根据推送权重从获取当前主题的所有消息中选择一定数量的消息作为需要推送的消息。例如:当推送权重为1时,是每条消息均需要推送;当推送权重为2时,是每两条消息只需要推送其中一条;当推送权重为n时,是每n条消息只需要推送其中一条。其中,推送权重为正整数。
在本发明一实施例中,所述确定当前客户连接对应的推送权重,包括:
接收所述当前客户连接对应的客户输入的初始推送权重;
确定所述当前客户连接对应的客户的接收速率;
根据所述接收速率对所述初始推送权重进行调整,生成所述当前客户连接对应的推送权重。
在本发明实施例中,根据接收速率来调整推送权重,实现负载均衡。具体地,当客户的接收速率较高时,基于初始推送权重提高推送权重,当客户的接收速率较低时,基于初始推送权重降低推送权重,达到带宽的合理分配。
在本发明一实施例中,该方法进一步包括:
预先设置至少一个任务队列,并为每个所述任务队列分配推送线程;
在所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中之后,进一步包括:
针对所述至少一个客户连接中的每个所述客户连接生成待处理任务,其中,所述待处理任务中包括待处理的客户连接的信息;
将至少一个所述待处理任务分配给所述至少一个任务队列;
所述从所述至少一个客户连接缓冲池中获取消息,包括:
针对每个所述推送线程,执行:利用当前推送线程,从所述当前推送线程对应的任务队列中获取所述待处理任务,根据所述待处理任务中待处理的客户连接的信息,确定出所述待处理的客户连接,从所述待处理的客户连接对应的客户连接缓冲池中获取消息;
所述分别将位于同一个所述客户连接缓冲池中的消息进行组包,生成每个所述客户连接缓冲池对应的待推送的数据包,包括:
针对每个所述推送线程,执行:利用所述当前推送线程,将所述待处理的客户连接对应的客户连接缓冲池中的消息进行组包,生成当前待推送的数据包;
所述分别将每个所述客户连接缓冲池对应的待推送的数据包,推送给对应的客户连接,包括:
针对每个所述推送线程,执行:利用所述当前推送线程,将所述当前待推送的数据包推送给所述待处理的客户连接。
在本发明实施例中,将客户连接缓冲池中的消息以待处理任务的方式分配给各个推送线程,每个推送线程负载一个任务队列,每个推送线程从对应的任务队列中逐个获取待处理任务并执行获取的待处理任务。每个待处理任务中设置有待处理的客户连接的信息,推送线程可以通过该信息找到对应的客户连接缓冲池。
在分配待处理任务时,可以根据各个推送线程的空闲情况来分配,有限向当前最空闲的推送线程分配待处理任务,实现资源的优化。
在本发明一实施例中,该方法进一步包括:预先设置至少一个获取线程,所述至少一个获取线程用于执行所述分别获取每个所述主题的消息;
进一步包括:
实时判断所述至少一个获取线程当前次获取的消息的数量与至少一个所述推送线程当前次推送的消息的数量之差是否大于等于第一预设值,如果是,则将没有休眠的至少一个所述获取线程中的第二预设值个所述获取线程休眠。
在本发明实施例中,当获取线程数量较多而推送线程推送的消息的数量较少时,就会有大量的消息堆积在客户连接缓冲池中,这时,将部分获取线程休眠,将更多的资源用于推送线程的处理,加快推送消息的速度,实现了资源的动态分配,以达到对资源的最优利用效果。
如图2所示,本发明实施例提供了一种消息处理的方法,该方法可以包括以下步骤:
步骤201:确定至少一个客户订阅的至少一个主题。
具体地,可以设置主题轮询列表来保存该至少一个主题。
另外,还可以设置客户维护列表来保存客户的信息。
具体地,每个客户在注册时,将客户订阅的至少一个主题保存到主题轮询列表中,将客户的信息保存到客户维护列表中。
举例来说,客户A订阅了主题A和主题B。例如:主题A为体育、主题B为社会新闻。
步骤202:针对每个主题,确定订阅当前主题的每个客户对应的针对当前主题的客户连接。
具体地,通过客户连接向每个客户的客户端推送消息。例如:通过客户A对应的针对主题A的客户连接向客户A的客户端推送消息。
具体地,可以设置主题推送列表来保存主题与客户连接的对应关系。
步骤203:为每个客户连接设置客户连接缓冲池。
具体地,通过客户连接缓冲池来缓存消息。
步骤204:预先设置至少一个任务队列,并为每个任务队列分配推送线程。
具体地,每个任务队列由一个推送线程来负责。
步骤205:周期性地分别获取每个主题的消息。
具体地,可以轮询主题轮询列表来获取各个主题的消息。
举例来说,主题A为体育,可以周期性以“体育”为关键词来搜索需要的消息,当然,也可以基于体育延伸出其他的关键词,例如:篮球、足球、运动会等。
步骤206:针对每个主题,执行:确定当前主题对应的至少一个客户连接;将获取的当前主题的消息存储到该至少一个客户连接对应的至少一个客户连接缓冲池中,针对该至少一个客户连接中的每个客户连接生成待处理任务,其中,待处理任务中包括待处理的客户连接的信息;将至少一个待处理任务分配给至少一个任务队列。
举例来说,针对主题A,确定主题A对应的至少一个客户连接(其中,包括客户A的针对主题A的客户连接A);将获取的主题A的消息存储到主题A对应的至少一个客户连接对应的至少一个客户连接缓冲池中(其中,针对客户A,将主题A的消息存储到客户连接A中);针对主题A对应的至少一个客户连接中的每个客户连接生成待处理任务(其中,针对客户连接A生成对应的待处理任务A,该待处理任务A中包括客户连接A的信息),将至少一个待处理任务分配给至少一个任务队列(其中,将客户连接A对应的待处理任务A分配给任一任务队列A)。
步骤207:针对每个推送线程,执行:利用当前推送线程,从当前推送线程对应的任务队列中获取待处理任务,根据待处理任务中待处理的客户连接的信息,确定出待处理的客户连接,从待处理的客户连接对应的客户连接缓冲池中获取消息。
举例来说,任务队列A有推送线程A进行处理,推送线程A从任务队列A中获取待处理任务A,根据待处理任务A中客户连接A的信息,确定出待处理的客户连接为客户连接A,从客户连接A对应的客户连接缓冲池中获取主题A的消息。
步骤208:针对每个推送线程,执行:利用当前推送线程,将待处理的客户连接对应的客户连接缓冲池中的消息进行组包,生成当前待推送的数据包。
举例来说,利用推送线程A,将客户连接A对应的客户连接缓冲池中的消息进行组包,生成当前待推送的数据包A。
步骤209:针对每个推送线程,执行:利用当前推送线程,将当前待推送的数据包推送给待处理的客户连接。
举例来说,利用推送线程A,将当前待推送的数据包A推送给客户连接A。
在本发明实施例中,采用组包发送、负载均衡和动态分配资源的方式,在各个任务间合理分配资源和带宽,使网络带宽和资源的分配使用达到最优化,充分利用网络带宽和***资源,高效、实时的将消息推送到客户。
在本发明实施例中,可以采用不同的任务队列来完成不同类型的任务,每一个任务队列只完成单一类型的任务,减少多重任务的复杂性和资源浪费。
在本发明实施例中,将获取的消息组包发送,减少频繁发送小数据包的***开支与带宽开支,提高发送速度。
在本发明实施例中,获取消息后实时发送给客户,不做任何停留,具有良好的实时性。
在本发明实施例中,通过将消息组包发送、负载均衡、动态分配***和网络资源等方式,提高网络的利用率,减少***额外开支,能够实现大数据量高速传输。
在本发明实施例中,通过动态分配资源、一次获取成组消息、推送权重分配等方式减少***切换开支,使资源在各个任务间合理分配,提高高并发环境下的资源利用率,减少***资源浪费,使服务在高并发环境下具有良好的性能。
如图3、图4所示,本发明实施例提供了一种消息处理的装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图3所示,为本发明实施例提供的一种消息处理的装置所在设备的一种硬件结构图,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等。以软件实现为例,如图4所示,作为一个逻辑意义上的装置,是通过其所在设备的CPU将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。本实施例提供的一种消息处理的装置,包括:
服务管理模块401,用于确定至少一个客户订阅的至少一个主题;针对每个所述主题,确定订阅当前主题的每个客户对应的针对所述当前主题的客户连接;为每个所述客户连接设置客户连接缓冲池;
消息获取模块402,用于周期性地分别获取每个所述主题的消息;针对每个所述主题,执行:确定当前主题对应的至少一个客户连接;将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中;
消息推送模块403,用于从所述至少一个客户连接缓冲池中获取消息;分别将位于同一个所述客户连接缓冲池中的消息进行组包,生成每个所述客户连接缓冲池对应的待推送的数据包;分别将每个所述客户连接缓冲池对应的待推送的数据包,推送给对应的客户连接。
在本发明一实施例中,该装置进一步包括:频率设置模块,用于针对每个所述客户连接设置推送权重;
所述消息获取模块,在执行所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中时,具体用于:
针对所述至少一个客户连接中的每个所述客户连接,执行:
确定当前客户连接对应的推送权重;
根据所述当前客户连接对应的推送权重,确定需要向所述当前客户连接推送的所述当前主题的消息;
将需要向所述当前客户连接推送的所述当前主题的消息存储到对应的客户连接缓冲池中。
在本发明一实施例中,所述消息获取模块,在执行所述确定当前客户连接对应的推送权重时,具体用于:
接收所述当前客户连接对应的客户输入的初始推送权重;
确定所述当前客户连接对应的客户的接收速率;
根据所述接收速率对所述初始推送权重进行调整,生成所述当前客户连接对应的推送权重。
在本发明一实施例中,该装置进一步包括:
队列设置模块,用于设置至少一个任务队列,并为每个所述任务队列分配推送线程;
所述消息获取模块,用于在所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中之后,执行:
针对所述至少一个客户连接中的每个所述客户连接生成待处理任务,其中,所述待处理任务中包括待处理的客户连接的信息;将至少一个所述待处理任务分配给所述至少一个任务队列;
所述消息推送模块,用于执行:
针对每个所述推送线程,执行:
利用当前推送线程,从所述当前推送线程对应的任务队列中获取所述待处理任务,根据所述待处理任务中待处理的客户连接的信息,确定出所述待处理的客户连接,从所述待处理的客户连接对应的客户连接缓冲池中获取消息;
利用所述当前推送线程,将所述待处理的客户连接对应的客户连接缓冲池中的消息进行组包,生成当前待推送的数据包;
利用所述当前推送线程,将所述当前待推送的数据包推送给所述待处理的客户连接。
在本发明一实施例中,该装置进一步包括:
线程设置模块,用于设置至少一个获取线程,所述至少一个获取线程用于执行所述分别获取每个所述主题的消息;
进一步包括:
资源分配模块,用于实时判断所述至少一个获取线程当前次获取的消息的数量与至少一个所述推送线程当前次推送的消息的数量之差是否大于等于第一预设值,如果是,则将没有休眠的至少一个所述获取线程中的第二预设值个所述获取线程休眠。
上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本发明实施例提供了一种可读介质,包括执行指令,当存储控制器的处理器执行所述执行指令时,所述存储控制器执行本发明实施例提供的任意一种消息处理的方法。
本发明实施例提供了一种存储控制器,包括:处理器、存储器和总线;
所述存储器用于存储执行指令,所述处理器与所述存储器通过所述总线连接,当所述存储控制器运行时,所述处理器执行所述存储器存储的执行指令,以使所述存储控制器执行本发明实施例提供的任意一种消息处理的方法。
本发明各个实施例至少具有如下有益效果:
1、在本发明实施例中,为每个客户连接设置一个客户连接缓冲池,将每个客户连接对应的消息存储在对应的客户连接缓冲池中,将客户连接缓冲池中的消息统一进行组包,生成待推送的数据包,将整个待推送的数据包推送给对应的客户连接,也就是说,不用一条一条的打包消息,可以将客户连接缓冲池中的消息整体进行打包,减少了打包的次数,节省了打包过程消耗的资源,也不用一条一条的推送消息,可以将客户连接缓冲池中的消息整体推送,减少了推送的次数,节省了推送过程消耗的资源,总之,本发明实施例降低了资源的消耗。
2、在本发明实施例中,根据接收速率来调整推送权重,实现负载均衡。具体地,当客户的接收速率较高时,基于初始推送权重提高推送权重,当客户的接收速率较低时,基于初始推送权重降低推送权重,达到带宽的合理分配。
3、在本发明实施例中,当获取线程数量较多而推送线程推送的消息的数量较少时,就会有大量的消息堆积在客户连接缓冲池中,这时,将部分获取线程休眠,将更多的资源用于推送线程的处理,加快推送消息的速度,实现了资源的动态分配,以达到对资源的最优利用效果。
4、在本发明实施例中,采用组包发送、负载均衡和动态分配资源的方式,在各个任务间合理分配资源和带宽,使网络带宽和资源的分配使用达到最优化,充分利用网络带宽和***资源,高效、实时的将消息推送到客户。
5、在本发明实施例中,将获取的消息组包发送,减少频繁发送小数据包的***开支与带宽开支,提高发送速度。
6、在本发明实施例中,通过将消息组包发送、负载均衡、动态分配***和网络资源等方式,提高网络的利用率,减少***额外开支,能够实现大数据量高速传输。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个〃····〃”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (2)
1.一种消息处理的方法,其特征在于,
确定至少一个客户订阅的至少一个主题;
针对每个所述主题,确定订阅当前主题的每个客户对应的针对所述当前主题的客户连接;
为每个所述客户连接设置客户连接缓冲池;
包括:
周期性地分别获取每个所述主题的消息;
针对每个所述主题,执行:确定当前主题对应的至少一个客户连接;将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中;
从所述至少一个客户连接缓冲池中获取消息;
分别将位于同一个所述客户连接缓冲池中的消息进行组包,生成每个所述客户连接缓冲池对应的待推送的数据包;
分别将每个所述客户连接缓冲池对应的待推送的数据包,推送给对应的客户连接;
进一步包括:
针对每个所述客户连接设置推送权重;
所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中,包括:
针对所述至少一个客户连接中的每个所述客户连接,执行:
确定当前客户连接对应的推送权重;
根据所述当前客户连接对应的推送权重,确定需要向所述当前客户连接推送的所述当前主题的消息;
将需要向所述当前客户连接推送的所述当前主题的消息存储到对应的客户连接缓冲池中;
所述确定当前客户连接对应的推送权重,包括:
接收所述当前客户连接对应的客户输入的初始推送权重;
确定所述当前客户连接对应的客户的接收速率;
根据所述接收速率对所述初始推送权重进行调整,生成所述当前客户连接对应的推送权重;
进一步包括:
预先设置至少一个任务队列,并为每个所述任务队列分配推送线程;
在所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中之后,进一步包括:
针对所述至少一个客户连接中的每个所述客户连接生成待处理任务,其中,所述待处理任务中包括待处理的客户连接的信息;
将至少一个所述待处理任务分配给所述至少一个任务队列;
所述从所述至少一个客户连接缓冲池中获取消息,包括:
针对每个所述推送线程,执行:利用当前推送线程,从所述当前推送线程对应的任务队列中获取所述待处理任务,根据所述待处理任务中待处理的客户连接的信息,确定出所述待处理的客户连接,从所述待处理的客户连接对应的客户连接缓冲池中获取消息;
所述分别将位于同一个所述客户连接缓冲池中的消息进行组包,生成每个所述客户连接缓冲池对应的待推送的数据包,包括:
针对每个所述推送线程,执行:利用所述当前推送线程,将所述待处理的客户连接对应的客户连接缓冲池中的消息进行组包,生成当前待推送的数据包;
所述分别将每个所述客户连接缓冲池对应的待推送的数据包,推送给对应的客户连接,包括:
针对每个所述推送线程,执行:利用所述当前推送线程,将所述当前待推送的数据包推送给所述待处理的客户连接;
进一步包括:预先设置至少一个获取线程,所述至少一个获取线程用于执行所述分别获取每个所述主题的消息;
进一步包括:
实时判断所述至少一个获取线程当前次获取的消息的数量与至少一个所述推送线程当前次推送的消息的数量之差是否大于等于第一预设值,如果是,则将没有休眠的至少一个所述获取线程中的第二预设值个所述获取线程休眠。
2.一种消息处理的装置,其特征在于,包括:
服务管理模块,用于确定至少一个客户订阅的至少一个主题;针对每个所述主题,确定订阅当前主题的每个客户对应的针对所述当前主题的客户连接;为每个所述客户连接设置客户连接缓冲池;
消息获取模块,用于周期性地分别获取每个所述主题的消息;针对每个所述主题,执行:确定当前主题对应的至少一个客户连接;将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中;
消息推送模块,用于从所述至少一个客户连接缓冲池中获取消息;分别将位于同一个所述客户连接缓冲池中的消息进行组包,生成每个所述客户连接缓冲池对应的待推送的数据包;分别将每个所述客户连接缓冲池对应的待推送的数据包,推送给对应的客户连接;
进一步包括:频率设置模块,用于针对每个所述客户连接设置推送权重;
所述消息获取模块,在执行所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中时,具体用于:
针对所述至少一个客户连接中的每个所述客户连接,执行:
确定当前客户连接对应的推送权重;
根据所述当前客户连接对应的推送权重,确定需要向所述当前客户连接推送的所述当前主题的消息;
将需要向所述当前客户连接推送的所述当前主题的消息存储到对应的客户连接缓冲池中;
所述消息获取模块,在执行所述确定当前客户连接对应的推送权重时,具体用于:
接收所述当前客户连接对应的客户输入的初始推送权重;
确定所述当前客户连接对应的客户的接收速率;
根据所述接收速率对所述初始推送权重进行调整,生成所述当前客户连接对应的推送权重;
进一步包括:
队列设置模块,用于设置至少一个任务队列,并为每个所述任务队列分配推送线程;
所述消息获取模块,用于在所述将获取的所述当前主题的消息存储到所述至少一个客户连接对应的至少一个客户连接缓冲池中之后,执行:
针对所述至少一个客户连接中的每个所述客户连接生成待处理任务,其中,所述待处理任务中包括待处理的客户连接的信息;将至少一个所述待处理任务分配给所述至少一个任务队列;
所述消息推送模块,用于执行:
针对每个所述推送线程,执行:
利用当前推送线程,从所述当前推送线程对应的任务队列中获取所述待处理任务,根据所述待处理任务中待处理的客户连接的信息,确定出所述待处理的客户连接,从所述待处理的客户连接对应的客户连接缓冲池中获取消息;
利用所述当前推送线程,将所述待处理的客户连接对应的客户连接缓冲池中的消息进行组包,生成当前待推送的数据包;
利用所述当前推送线程,将所述当前待推送的数据包推送给所述待处理的客户连接;
进一步包括:
线程设置模块,用于设置至少一个获取线程,所述至少一个获取线程用于执行所述分别获取每个所述主题的消息;
进一步包括:
资源分配模块,用于实时判断所述至少一个获取线程当前次获取的消息的数量与至少一个所述推送线程当前次推送的消息的数量之差是否大于等于第一预设值,如果是,则将没有休眠的至少一个所述获取线程中的第二预设值个所述获取线程休眠。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711326101.8A CN107911484B (zh) | 2017-12-13 | 2017-12-13 | 一种消息处理的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711326101.8A CN107911484B (zh) | 2017-12-13 | 2017-12-13 | 一种消息处理的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107911484A CN107911484A (zh) | 2018-04-13 |
CN107911484B true CN107911484B (zh) | 2020-07-07 |
Family
ID=61865329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711326101.8A Active CN107911484B (zh) | 2017-12-13 | 2017-12-13 | 一种消息处理的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107911484B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109067643B (zh) * | 2018-09-26 | 2022-07-29 | 中国平安财产保险股份有限公司 | 基于关键字的回复方法、装置、计算机设备及存储介质 |
CN112202914B (zh) * | 2020-10-13 | 2023-02-24 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种消息推送方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102186256A (zh) * | 2011-05-27 | 2011-09-14 | 华南理工大学 | 一种lte调度中确定用户优先级排序的方法 |
CN102255966A (zh) * | 2011-07-07 | 2011-11-23 | 苏州阔地网络科技有限公司 | 一种消息推送方法及即时通信服务器 |
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和*** |
CN103020056A (zh) * | 2011-09-20 | 2013-04-03 | 佳都新太科技股份有限公司 | 一种跨开放平台社交消息优化计算的订阅推送引擎 |
CN103428290A (zh) * | 2013-08-19 | 2013-12-04 | 北京网秦天下科技有限公司 | 数据推送方法和设备 |
CN104980898A (zh) * | 2014-04-04 | 2015-10-14 | 中兴通讯股份有限公司 | 一种信息推送方法、***及设备 |
CN106790696A (zh) * | 2017-02-21 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种消息传输方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100739721B1 (ko) * | 2005-08-17 | 2007-07-13 | 삼성전자주식회사 | 정보 제공 방법 및 푸시 모드 서비스 제공 방법 |
US10271345B2 (en) * | 2014-10-20 | 2019-04-23 | Telefonaktiebolaget Lm Ericsson (Publ) | Network node and method for handling a process of controlling a data transfer related to video data of a video streaming service |
CN104754036A (zh) * | 2015-03-06 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种基于kafka的消息处理***及处理方法 |
-
2017
- 2017-12-13 CN CN201711326101.8A patent/CN107911484B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102186256A (zh) * | 2011-05-27 | 2011-09-14 | 华南理工大学 | 一种lte调度中确定用户优先级排序的方法 |
CN102255966A (zh) * | 2011-07-07 | 2011-11-23 | 苏州阔地网络科技有限公司 | 一种消息推送方法及即时通信服务器 |
CN103020056A (zh) * | 2011-09-20 | 2013-04-03 | 佳都新太科技股份有限公司 | 一种跨开放平台社交消息优化计算的订阅推送引擎 |
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和*** |
CN103428290A (zh) * | 2013-08-19 | 2013-12-04 | 北京网秦天下科技有限公司 | 数据推送方法和设备 |
CN104980898A (zh) * | 2014-04-04 | 2015-10-14 | 中兴通讯股份有限公司 | 一种信息推送方法、***及设备 |
CN106790696A (zh) * | 2017-02-21 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种消息传输方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107911484A (zh) | 2018-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11734271B2 (en) | Data query method, apparatus and device | |
Peng et al. | R-storm: Resource-aware scheduling in storm | |
US11888756B2 (en) | Software load balancer to maximize utilization | |
US10452997B2 (en) | Systems and techniques for utilizing resource aware queues and/or service sharing in a multi-server environment | |
CN104915407B (zh) | 一种基于Hadoop多作业环境下的资源调度方法 | |
US5875329A (en) | Intelligent batching of distributed messages | |
Zhang et al. | Toward transcoding as a service: energy-efficient offloading policy for green mobile cloud | |
US20160224380A1 (en) | Workload-driven techniques for providing biased service level guarantees | |
US8626955B2 (en) | Directing packets to a processor unit | |
Liu et al. | An economical and SLO-guaranteed cloud storage service across multiple cloud service providers | |
US10114866B2 (en) | Memory-constrained aggregation using intra-operator pipelining | |
US20180349178A1 (en) | A method and system for scalable job processing | |
CN105900064A (zh) | 调度数据流任务的方法和装置 | |
CN103927225A (zh) | 一种多核心架构的互联网信息处理优化方法 | |
EP3129880A1 (en) | Method and device for augmenting and releasing capacity of computing resources in real-time stream computing system | |
JP2012118987A (ja) | メモリ使用量照会ガバナのためのコンピュータ実装方法、コンピュータ・プログラム、およびシステム(メモリ使用量照会ガバナ) | |
CN110058940B (zh) | 一种多线程环境下的数据处理方法及装置 | |
US9817698B2 (en) | Scheduling execution requests to allow partial results | |
CN107911484B (zh) | 一种消息处理的方法及装置 | |
WO2020238989A1 (zh) | 一种调度任务处理实体的方法及装置 | |
Komarasamy et al. | A novel approach for Dynamic Load Balancing with effective Bin Packing and VM Reconfiguration in cloud | |
CN113961341A (zh) | 基于Actor模型的并发数据处理方法、***、设备和存储介质 | |
CN111857992A (zh) | 一种Radosgw模块中线程资源分配方法和装置 | |
CN109358964B (zh) | 一种服务器集群资源调度方法 | |
CN114900525A (zh) | 一种偏斜数据流的本发明实施例提供的方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |