发明内容
针对相关技术中PUSH消息的发送效率较低的问题,本发明提供了一种消息发送方法及装置,以至少解决上述问题。
根据本发明的一个方面,提供了一种消息发送方法,该方法包括:至少根据流量门限值,确定在当前周期内是否需要对发送给短信中心的推送消息进行缓存,并对需要缓存的推送消息进行缓存,其中,上述缓存采用先进先出的方式;在上述当前周期的下一个周期内对缓存的推送消息进行发送。
如果在上述当前周期内将上一周期缓存的推送消息发送完毕,并且在上述当前周期内已发送的推送消息的流量值小于上述流量门限值,则在当前周期内向上述短信中心发送当前周期内获得的推送消息;否则,缓存上述当前周期内获得的推送消息。
对需要缓存的推送消息进行缓存包括:对于上述需要缓存的推送消息缓存在缓存消息队列的最后。
上述方法还包括:接收上述短信中心发送的响应,其中,上述响应用于指示以下至少之一:用于指示调整上述流量门限值、用于指示忽略上述流量门限值向上述短信中心发送推送消息、用于指示停止向上述短信中心发送推送消息。
如果上述响应用于指示调整上述流量门限值,接收上述短信中心发送的响应之后,上述方法还包括:根据上述响应对上述流量门限值进行调整。
根据上述响应对上述流量门限值进行调整包括:计算上述当前周期内预发送上述推送消息的流量值;判断上述当前周期的上一个周期内已发送的上述推送消息的流量值是否小于最小流量门限值;如果是,比较上述上一个周期内剩余流量值与上述当前周期内预发送流量值的大小,确定上述上一个周期内剩余流量值与上述当前周期内预发送量值中的最大值;比较上述最大值与上述最小流量门限值的大小,确定上述最大值与上述最小流量门限值中的最小值,为上述当前周期内允许的流量门限值;如果否,比较上述当前周期内预发送流量值与上述最小流量门限值的大小,确定上述当前周期内预发送流量值与上述最小流量门限值中的最小值,为上述当前周期内允许的流量门限值。
上述周期可以为1秒。
根据本发明的另一方面,提供了一种消息发送装置,该装置包括:缓存确定模块,用于至少根据流量门限值,确定在当前周期内是否需要对发送给短信中心的推送消息进行缓存;缓存模块,用于在上述缓存确定模块确定需要缓存的情况下,对需要缓存的推送消息进行缓存,其中,上述缓存采用先进先出的方式;发送模块,用于在上述当前周期的下一个周期内对缓存的推送消息进行发送。
如果在上述当前周期内将上一周期缓存的推送消息发送完毕,并且在上述当前周期内已发送的推送消息的流量值小于上述流量门限值,则在当前周期内向上述短信中心发送当前周期内获得的推送消息;否则,缓存上述当前周期内获得的推送消息。
上述缓存模块包括:缓存单元,用于对于上述需要缓存的推送消息缓存在缓存消息队列的最后。
上述装置还包括:响应接收模块,用于接收上述短信中心发送的响应,其中,上述响应用于指示以下至少之一:用于指示调整上述流量门限值、用于指示忽略上述流量门限值向上述短信中心发送推送消息、用于指示停止向上述短信中心发送推送消息。
如果上述响应用于指示调整上述流量门限值,接收上述短信中心发送的响应之后,上述装置还包括:调整模块,用于根据上述响应对上述流量门限值进行调整。
上述调整模块包括:计算单元,用于计算上述当前周期内预发送上述推送消息的流量值;判断单元,用于判断上述当前周期的上一个周期内已发送的上述推送消息的流量值是否小于最小流量门限值;第一确定单元,用于在上述判断单元的判断结果为是的情况下,比较上述上一个周期内剩余流量值与上述当前周期内预发送流量值的大小,确定上述上一个周期内剩余流量值与上述当前周期内预发送量值中的最大值;比较上述最大值与上述最小流量门限值的大小,确定上述最大值与上述最小流量门限值中的最小值,为上述当前周期内允许的流量门限值;第二确定单元,用于在上述判断单元的判断结果为否的情况下,比较上述当前周期内预发送流量值与上述最小流量门限值的大小,确定上述当前周期内预发送流量值与上述最小流量门限值中的最小值,为上述当前周期内允许的流量门限值。
通过本发明,至少根据流量门限值,确定在当前周期内是否需要对发送给短信中心的推送消息进行缓存,并对需要缓存的推送消息进行缓存,其中,上述缓存采用先进先出的方式;在上述当前周期的下一个周期内对缓存的推送消息进行发送,解决了相关技术中PUSH消息的发送效率较低的问题,从而能够将TPS稳定下发,在TPS比较高的情况下可以缓存消息,在TPS低时再发送。保证了PPG和短信中心之间的数据传递能够平稳的传送,防止流量过大导致数据丢失,提高了用户感受度。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
相关技术中PPG和短信中心各自能够处理的最大TPS不同,为了保证PPG和短信中心之间的数据传递能够平稳的传送,防止流量过大导致数据丢失,本发明实施例提供了一种消息发送方法及装置,下面通过具体实施例进行详细说明。
本实施例提供了一种消息发送方法,该方法一般能够在PPG侧实现。图1是根据本发明实施例的消息发送方法的流程图,如图1所示,该方法包括以下步骤(步骤S102-步骤S104):
步骤S102,至少根据流量门限值,确定在当前周期内是否需要对发送给短信中心的推送消息进行缓存,并对需要缓存的推送消息进行缓存,其中,上述缓存采用先进先出的方式;
步骤S104,在上述当前周期的下一个周期内对缓存的推送消息进行发送。
通过上述方法,PPG至少根据流量门限值,确定在当前周期内是否需要对发送给短信中心的推送消息进行缓存,并对需要缓存的推送消息进行缓存,其中,上述缓存采用先进先出的方式;在上述当前周期的下一个周期内PPG对缓存的推送消息进行发送,解决了相关技术中PUSH消息的发送效率较低的问题,从而能够将TPS稳定下发,在TPS比较高的情况下可以缓存消息,在TPS低时再发送。保证了PPG和短信中心之间的数据传递能够平稳的传送,防止流量过大导致数据丢失,提高了用户感受度。
在本实施例的优选实施方式中,如果在当前周期内将上一周期缓存的推送消息发送完毕,并且在当前周期内已发送的推送消息的流量值小于流量门限值,则在当前周期内向短信中心发送当前周期内获得的推送消息;否则,缓存当前周期内获得的推送消息。
在本实施例中,对推送消息进行缓存采用的是先进先出的方式,因此本实施例提供了一种优选实施方式,即对于需要缓存的推送消息缓存在缓存消息队列的最后。这样在PPG对于缓存的推送消息进行发送时,先发送位于缓存消息队列最前面的推送消息,通过该方式,首先不需要将当前周期未能发送的推送消息抛弃,避免了数据丢失;其次保证了推送消息的发送秩序,提高用户的感受。
在本实施例的优选实施方式中,上述消息发送方法还包括:接收短信中心发送的响应,其中,该响应用于指示以下至少之一:用于指示调整流量门限值、用于指示忽略流量门限值向短信中心发送推送消息、用于指示停止向短信中心发送推送消息。在短信中心有足够的流量可以接收推送消息的情况下,短信中心可以向PPG发送响应,指示PPG可以忽略流量门限值向短信中心发送推送消息;在短信中心已没有流量可以接收推送消息的情况下,短信中心可以向PPG发送响应,指示PPG停止向短信中心发送推送消息。通过上述优选实施方式,PPG和短信中心可以根据实际情况通过响应调整流量门限值,或者调整推送消息的发送方式等,提高了推送消息的发送成功率,避免了数据浪费,提高了用户的感受。
如果上述响应用于指示调整流量门限值,PPG接收短信中心发送的响应之后,根据上述响应对上述流量门限值进行调整。具体的调整方式可以通过以下优选实施方式实现:
首先,PPG计算当前周期内预发送推送消息的流量值;
然后,PPG判断当前周期的上一个周期内已发送的推送消息的流量值是否小于最小流量门限值;
如果是,比较上一个周期内剩余流量值与当前周期内预发送流量值的大小,确定上一个周期内剩余流量值与当前周期内预发送量值中的最大值;比较该最大值与最小流量门限值的大小,确定最大值与最小流量门限值中的最小值,为当前周期内允许的流量门限值;
如果否,比较当前周期内预发送流量值与最小流量门限值的大小,确定当前周期内预发送流量值与最小流量门限值中的最小值,为当前周期内允许的流量门限值。
在本实施例中,对于上述当前周期、上一个周期或者下一个周期而言,周期时间一般为1秒。
对应于上述实施例中介绍的消息发送方法,本实施例提供了一种消息发送装置,该装置一般可设置在PPG侧,用于实现上述实施例。图2是根据本发明实施例的消息发送装置的结构框图,如图2所示,该装置包括:缓存确定模块10、缓存模块20和发送模块30。下面对该结构进行具体介绍。
缓存确定模块10,用于至少根据流量门限值,确定在当前周期内是否需要对发送给短信中心的推送消息进行缓存;
缓存模块20,连接至缓存确定模块10,用于在上述缓存确定模块10确定需要缓存的情况下,对需要缓存的推送消息进行缓存,其中,上述缓存采用先进先出的方式;
发送模块30,连接至缓存模块20,用于在上述当前周期的下一个周期内对缓存的推送消息进行发送。
通过上述装置,缓存确定模块10至少根据流量门限值,确定在当前周期内是否需要对发送给短信中心的推送消息进行缓存,然后缓存模块20对需要缓存的推送消息进行缓存,其中,上述缓存采用先进先出的方式,发送模块30在上述当前周期的下一个周期内PPG对缓存的推送消息进行发送,解决了相关技术中PUSH消息的发送效率较低的问题,从而能够将TPS稳定下发,在TPS比较高的情况下可以缓存消息,在TPS低时再发送。保证了PPG和短信中心之间的数据传递能够平稳的传送,防止流量过大导致数据丢失,提高了用户感受度。
在本实施例的优选实施方式中,如果在当前周期内将上一周期缓存的推送消息发送完毕,并且在当前周期内已发送的推送消息的流量值小于流量门限值,则在当前周期内向短信中心发送当前周期内获得的推送消息;否则,缓存当前周期内获得的推送消息。
在本实施例中,对推送消息进行缓存采用的是先进先出的方式,因此本实施例提供了一种优选实施方式,即上述缓存模块20包括:缓存单元,用于对于上述需要缓存的推送消息缓存在缓存消息队列的最后。这样在PPG对于缓存的推送消息进行发送时,先发送位于缓存消息队列最前面的推送消息,通过该方式,首先不需要将当前周期未能发送的推送消息抛弃,避免了数据丢失;其次保证了推送消息的发送秩序,提高用户的感受。
图3是根据本发明实施例的消息发送装置的第一种具体结构框图,如图3所示,该装置除了包括图2中所示的各个模块之外,还包括:响应接收模块40,连接至发送模块30,用于接收上述短信中心发送的响应,其中,上述响应用于指示以下至少之一:用于指示调整上述流量门限值、用于指示忽略上述流量门限值向上述短信中心发送推送消息、用于指示停止向上述短信中心发送推送消息。在短信中心有足够的流量可以接收推送消息的情况下,短信中心可以向PPG发送响应,指示PPG可以忽略流量门限值向短信中心发送推送消息;在短信中心已没有流量可以接收推送消息的情况下,短信中心可以向PPG发送响应,指示PPG停止向短信中心发送推送消息。通过上述优选实施方式,PPG和短信中心可以根据实际情况通过响应调整流量门限值,或者调整推送消息的发送方式等,提高了推送消息的发送成功率,避免了数据浪费,提高了用户的感受。
图4是根据本发明实施例的消息发送装置的第二种具体结构框图,如图4所示,如果上述响应用于指示调整上述流量门限值,接收上述短信中心发送的响应之后,该装置除了包括图2中所示的各个模块之外,还包括:调整模块50,连接至响应接收模块40,用于根据上述响应对上述流量门限值进行调整。
针对调整模块对流量门限值的具体调整方式,本实施例提供了一种优选实施方式,即上述调整模块50包括:计算单元,用于计算当前周期内预发送推送消息的流量值;判断单元,用于判断当前周期的上一个周期内已发送的推送消息的流量值是否小于最小流量门限值;第一确定单元,用于在上述判断单元的判断结果为是的情况下,比较上一个周期内剩余流量值与当前周期内预发送流量值的大小,确定上一个周期内剩余流量值与当前周期内预发送量值中的最大值;比较最大值与最小流量门限值的大小,确定最大值与最小流量门限值中的最小值,为当前周期内允许的流量门限值;第二确定单元,用于在上述判断单元的判断结果为否的情况下,比较当前周期内预发送流量值与最小流量门限值的大小,确定当前周期内预发送流量值与最小流量门限值中的最小值,为当前周期内允许的流量门限值。
在本实施例中,对于上述当前周期、上一个周期或者下一个周期而言,周期时间一般为1秒。
下面对于基于窗口的流量控制系统进行介绍,图5是根据本发明实施例的基于窗口的流量控制系统的结构示意图,如图5所示,该系统包括:推送发起模块、PPG模块、短信中心和终端。下面分别对上述基于窗口的流量控制系统的各个组成部分进行介绍。
推送发起模块,用于发送推送消息。
PPG模块,其功能与上述实施例介绍的消息发送装置的功能相当,PPG模块包括:PUSH消息编解码线程,缓存流量控制线程以及SMPP发送线程。
其中,PUSH消息编解码线程,用于接收和解析推送消息,得到推送消息内容,按照承载网络类型,对相对应的推送内容进行承载网络类型的编码。
缓存流量控制(CACHE)线程,其功能与上述实施例中的调整模块50的功能相当,用于根据事先设定的TPS窗口对PUSH消息的下发进行流量控制。用于接收PUSH消息编解码线程处理完后待发送的PUSH消息。并且,在收到消息后,判断是否有空闲的TPS可以发送、并且缓存消息队列中没有数据、本秒(相当于上述实施例中的当前周期)内已经发送的TPS低于最大TPS门限值,同时满足上述要求则发送PUSH消息,否则,保存到缓存消息队列的最后。并且,本线程自启动时就设置一个秒定时器,每秒定时器到达时,计算本秒一开始可以发送多少个TPS;若上一秒已经发送TPS小于最小TPS门限值,先取空闲可发TPS和上秒剩余TPS的最大值,取的值再和最小TPS的门限值比较,取小值;若上一秒已经发送的TPS大于最小门限值,则取最小门限值和可发送的TPS的小值;从缓存消息队列的开头取计算出的TPS进行发送。
缓存流量控制线程收到短信中心的响应,判断缓存队列中是否有缓存消息,并且当前秒发送的TPS还没有超过最大TPS门限值,则直接从缓存队列的开头取消息进行发送。在知悉短信中心的TPS门限值以后,可以有效地控制下发的TPS值。并且PUSH消息下发进程有峰谷时,在推送发起模块下发TPS比较高时,将消息放置到缓存中,在TPS降低的时候再下发。
缓存流量控制线程实施后的TPS控制结果如表1所示。
表1
SMPP发送线程,接收缓存流量控制线程准备发送的PUSH消息,并且接受短信中心返回的响应消息,并将响应消息返回给缓存流量控制线程,由缓存流量控制线程收到后判断是否再下发。
基于上述实施例介绍的基于窗口的流量控制系统,下面对该系统的操作方法进行介绍。图6是根据本发明实施例的流量控制方法的流程图,如图6所示,该方法包括以下步骤(步骤S602-步骤S610):
步骤S602,推送发起模块发送PUSH消息给PPG模块。
步骤S604,PPG模块将PUSH消息经过处理发送到缓存流量控制线程。具体地,PPG模块对PUSH消息进行解码编码处理,形成实际下发给短信中心的PUSH消息,将PUSH消息发送给缓存流量控制线程。
步骤S606,缓存流量控制线程判断是否满足当前发送的条件,即判断是否有空闲的TPS可以发送,并且缓存消息队列中没有数据,本秒内已经发送的TPS低于最大TPS门限值,如果满足上述要求,则执行步骤S610。否则,执行步骤S608。
在上述步骤S606中,上述空闲的TPS可发送,是指上一秒的最大TPS没有发完,还有剩余的TPS可以下发。上述本秒内已经发送的TPS低于最大TPS门限值,是指本秒时段开始计时到收到当前新的PUSH消息为止,发送的TPS数低于TPS门限值。上述最大TPS,是依据短信中心的性能指标提前设定的流量门限值。
以TPS的窗口值,最小TPS门限值为10TPS,最大TPS门限值为50TPS为例,若上一秒发送的TPS为30TPS,且缓存消息队列中没有缓存消息,本秒内已经发送了10TPS,低于50tos,那么新收到的消息允许下发;若上一秒发送的TPS已经超过50TPS,或者缓存中有消息,或者本秒发送的TPS已经超过了50TPS,那么新收到的消息不允许下发,保存到缓存消息队列的最后。
步骤S608,在判断不满足发送条件后,将PUSH消息保存到缓存消息队列的最后。
步骤S610,在判断满足发送条件后,将PUSH消息直接发送到短信中心。
对于上述实施例中缓存流量控制线程的操作流程,下面进行具体介绍。图7是根据本发明实施例的缓存流量控制线程的秒循环控制的流程图,如图7所示,该流程包括以下步骤(步骤S702-步骤S708):
步骤S702,缓存流量控制线程启动时设定秒循环定时器。
步骤S704,定时器计算在一秒开始时可以发送消息的个数,确定是否能够发送PUSH消息。如果是,则执行步骤S708,如果否,则执行步骤S706。
当定时器到达时,计算本秒一开始可以发送多少个TPS。若上一秒已经发送TPS小于最小TPS门限值,先取空闲可发TPS和上秒剩余TPS的最大值,取的值然后再和最小TPS的门限值比较,取小值。若上一秒已经发送的TPS大于最小TPS门限值,则取最小门限值和可发送的TPS的小值。从缓存消息队列的开头取计算出的TPS进行发送。
以TPS的窗口值,最小TPS门限值为10TPS,最大TPS门限值为50TPS为例,若上一秒已经发送的TPS为6TPS低于10TPS,还有30TPS没有发,则计算min(10,max(10-6,30)),本秒开始可以发送10TPS。
步骤S706,不发送PUSH消息。
步骤S708,从缓存消息队列头去计算出的可以发送的消息个数,进行PUSH消息的发送。
从以上的描述中可以看出,本发明可以将TPS稳定地下发,在TPS比较高的情况下可以缓存消息,在TPS低时再发送。根据短信中心的性能调节PUSH下发的TPS,来达到流量控制的目的,这种应用能根据接收端的响应速度来调节TPS,非常适合于现场的实际情况。保证了PPG和短信中心之间的数据传递能够平稳的传送,防止流量过大导致数据丢失,提高了用户感受度。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。