CN110417884B - 一种消息推送方法、装置、设备及存储介质 - Google Patents
一种消息推送方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN110417884B CN110417884B CN201910666781.0A CN201910666781A CN110417884B CN 110417884 B CN110417884 B CN 110417884B CN 201910666781 A CN201910666781 A CN 201910666781A CN 110417884 B CN110417884 B CN 110417884B
- Authority
- CN
- China
- Prior art keywords
- message
- push
- pushing
- target
- task
- 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
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/535—Tracking the activity of the user
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请公开了一种消息推送方法,该方法可以包括以下步骤:在接收到业务方针对目标消息的推送请求时,根据推送请求,创建目标推送任务;在所有已记录的客户端中确定推送对象;基于目标推送任务,分别向每个推送对象推送目标消息。应用本申请实施例所提供的技术方案,在有目标消息要推送时,在所有已记录的客户端中确定推送对象,有针对性地向各个推送对象推送目标消息,尽量避免造成对用户的过多打扰,避免影响用户对客户端或设备的使用。本申请还公开了一种消息推送装置、设备及存储介质,具有相应技术效果。
Description
技术领域
本申请涉及计算机应用技术领域,特别是涉及一种消息推送方法、装置、设备及存储介质。
背景技术
随着计算机技术和互联网技术的快速发展,手机、电脑等终端设备的使用频率越来越高,用户根据需要可以在设备中安装各类客户端,如新闻客户端、购物客户端等。不同客户端对应不同业务方,如新闻客户端对应业务方A,购物客户端对应业务方B。业务方在有消息需要推送给用户时,可以通过服务端将消息推送给对应的客户端,进而展示给用户。
目前,在有消息要推送给客户端时,会将同一消息同时推送给与业务方对应的各个客户端,即每个客户端展示给各个用户的消息都是一样的。
这样存在一定的缺点。因为并非所有消息都需要针对于所有用户,或者说,并非所有用户对所有消息都感兴趣。对于有的用户而言,如果频繁向该用户推送其并不感兴趣的,或者并不需要的消息,将会造成对该用户的过多打扰,可能会影响该用户对客户端或设备的使用,降低该用户对客户端的使用兴趣。
发明内容
本申请的目的是提供一种消息推送方法、装置、设备及存储介质,以有针对性地进行消息推送。
为解决上述技术问题,本申请提供如下技术方案:
一种消息推送方法,包括:
在接收到业务方针对目标消息的推送请求时,根据所述推送请求,创建目标推送任务;
在所有已记录的客户端中确定推送对象;
基于所述目标推送任务,分别向每个推送对象推送所述目标消息。
在本申请的一种具体实施方式中,在接收到业务方针对目标消息的推送请求时,还包括:
在消息库中保存所述目标消息。
在本申请的一种具体实施方式中,在所述在所有已记录的客户端中确定推送对象之后,还包括:
确定所述目标消息的索引信息,所述目标消息的索引信息包括所述目标消息的序列号和标识号,所述目标消息的序列号为自增序列号;
在每个推送对象对应的消息列表中添加所述目标消息的索引信息。
在本申请的一种具体实施方式中,还包括:
针对每个推送对象,在接收到该推送对象返回的针对所述目标消息的确认信息时,将该推送对象对应的消息列表中所述目标消息的索引信息标记为已确认状态,或者,在该推送对象对应的消息列表中删除所述目标消息的索引信息。
在本申请的一种具体实施方式中,还包括:
删除每个消息列表中达到预设时效的消息的索引信息。
在本申请的一种具体实施方式中,在所述分别向每个推送对象推送所述目标消息之后,还包括:
获得推送结果;
向所述业务方返回所述推送结果。
在本申请的一种具体实施方式中,所述根据所述推送请求,创建目标推送任务,包括:
根据所述推送请求,确定所述目标消息是否为定时推送消息;
如果是,则在达到所述目标消息对应的推送时刻时,生成目标推送任务。
在本申请的一种具体实施方式中,所述在所有已记录的客户端中确定推送对象,包括:
根据所述目标推送任务的类型,在所有已记录的客户端中确定推送对象。
在本申请的一种具体实施方式中,所述根据所述目标推送任务的类型,在所有已记录的客户端中确定推送对象,包括:
如果所述目标推送任务的类型为全量在线推送类型,则查询当前每个已记录的客户端的在线状态,将当前处于在线状态的所有客户端均确定为推送对象;
如果所述目标推送任务的类型为全量推送类型,则将所有已记录的客户端均确定为推送对象;
如果所述目标推送任务的类型为指定推送类型,则根据所述推送请求,在所有已记录的客户端中确定指定客户端,将所述指定客户端确定为推送对象。
在本申请的一种具体实施方式中,所述目标推送任务的类型为全量推送类型,所述分别向每个推送对象推送所述目标消息,包括:
针对每个推送对象,如果该推送对象当前处于在线状态,则向该推送对象推送所述目标消息;
如果该推送对象当前未处于在线状态,则在监测到该推送对象上线后,确定包含所述目标消息的待推送消息,向该推送对象推送所述待推送消息。
在本申请的一种具体实施方式中,所述确定包含所述目标消息的待推送消息,包括:
确定该推送对象已接收到的消息的最大序列号;
基于该推送对象对应的消息列表,确定包含所述目标消息的待推送消息,所述待推送消息的序列号均大于该最大序列号。
在本申请的一种具体实施方式中,所述目标推送任务的类型为全量推送类型或指定推送类型,所述分别向每个推送对象推送所述目标消息,包括:
针对每个推送对象,如果该推送对象当前处于在线状态,则通过与该推送对象的长链接通道向该推送对象推送所述目标消息;
如果该推送对象当前未处于在线状态,则通过该推送对象对应的厂商消息通道向该推送对象推送所述目标消息。
一种消息推送装置,包括:
推送任务创建模块,用于在接收到业务方针对目标消息的推送请求时,根据所述推送请求,创建目标推送任务;
推送对象确定模块,用于在所有已记录的客户端中确定推送对象;
消息推送模块,用于基于所述目标推送任务,分别向每个推送对象推送所述目标消息。
一种消息推送设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现上述任一项所述消息推送方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述消息推送方法的步骤。
应用本申请实施例所提供的技术方案,在接收到业务方针对目标消息的推送请求时,可以根据推送请求,创建目标推送任务,在所有已记录的客户端中确定推送对象,分别向每个推送对象推送目标消息。在有目标消息要推送时,在所有已记录的客户端中确定推送对象,有针对性地向各个推送对象推送目标消息,尽量避免造成对用户的过多打扰,避免影响用户对客户端或设备的使用。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例中一种消息推送系统的架构示意图;
图2为本申请实施例中一种消息推送方法的实施流程图;
图3为本申请实施例中全量在线推送场景中消息推送流程图;
图4为本申请实施例中推送统计流程示意图;
图5为本申请实施例中全量推送场景中消息推送流程图;
图6为本申请实施例中单播推送场景中消息推送流程图;
图7为本申请实施例中一种消息推送装置的结构示意图;
图8为本申请实施例中一种消息推送设备的结构示意图。
具体实施方式
本申请的核心是提供一种消息推送方法。该方法可以应用于消息推送系统。所谓消息推送,是指由业务方主动发起的,将消息推送给用户,用户被动接收。在业务方有消息推送的需求时,可以向消息推送系统发送相应的推送请求,如发出针对目标消息的推送请求。消息推送系统在接收到该推送请求后,可以创建目标推送任务,并在所有已记录的客户端中确定推送对象,即实际想要将目标消息推送给哪些客户端,并基于目标推送任务,分别向每个推送对象推送目标消息。这样,可以有针对性地进行消息的推送,快速、准确地将目标消息推送给相应的客户端。尽量避免造成对用户的过多打扰,避免影响用户对客户端或设备的使用。
在本申请实施例中,客户端可以是新闻客户端、购物客户端、机器人控制客户端等。客户端可以安装于安卓、iOS、Linux等操作系统的设备中。
为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如图1所示,为本申请实施例中消息推送系统的架构示意图,该消息推送系统可以包括推送接口(PushAPI)110、任务监测服务(JobMonitor)120、会话存储服务(SessionStore)130、推送服务(Push)140、消息存储服务(MsgStore)150、推送管道(Channel)160、连接点(Conn)170等。
其中,推送接口110可提供给业务方,可以接收业务方针对目标消息的推送请求,还可以接收业务方对各客户端对应的消息列表的查询请求。业务方在有消息需要推送给客户端时,可以通过推送接口110向消息推送系统发出相应的推送请求。
推送接口110在接收到业务方的推送请求时,可以调用任务监测服务120创建目标推送任务,通过会话存储服务130可以查询各客户端的在线状态,并在已记录的客户端中确定推送对象,即要将目标消息推送给哪些客户端。其中,会话存储服务130可以包括实时会话管理服务和历史会话管理服务,实时会话管理服务可以进行长链接的设备/用户实时会话状态维护,提供在线会话状态记录维护,如上/下线、过期淘汰等,历史会话管理服务可以进行历史会话数据存储,保存历史的设备接入记录以及实时的简要在线/离线信息。
推送接口110还可以调用推送服务140,向推送对象推送目标消息。
推送服务140可以调用消息存储服务150,保存目标消息,并在每个推送对象对应的消息列表中添加目标消息的索引信息,如目标消息的序列号及标识号等,目标消息的序列号为自增序列号。
推送服务140还可以通过推送管道160调用相应的连接点170,将目标消息推送给推送对象。消息推送系统可以通过一个或多个连接点170与每个客户端建立长链接通道。即连接点170为客户端长链接入口,可以进行连接管理,具有上行/下行消息传输的能力。推送管道160可以通过客户端携带的连接信息,查找到与客户端对应的连接点170。
在实际应用中,可以仅部署一套由推送服务140、消息存储服务150、推送管道160、连接点170等构成的推送子系统,供不同业务方使用,即不同业务方均使用同一套推送子系统进行消息推送。还可以部署多套由推送服务140、消息存储服务150、推送管道160、连接点170等构成的推送子系统,供不同业务方使用,即不同业务方分别使用不同的推送子系统,这样可以将不同业务方要推送的消息进行隔离,避免消息之间相互影响,保证消息的安全性。当然,对于同一业务方也可部署多套由推送服务140、消息存储服务150、推送管道160、连接点170等构成的推送子系统,对客户端进行分组,并行进行消息推送。
消息推送系统还可以包括通知服务和序号服务。通知服务主要用于转发客户端对接收到的消息的确认信息,客户端的上/下线信息等。序号服务主要用于为要推送的消息生成自增序列号。
上面对消息推送系统的各组成进行了整体介绍,下面对应用消息推送系统进行消息推送的过程进行详细说明。
参见图2所示,为本申请实施例所提供的一种消息推送方法的实施流程图,该方法可以包括以下步骤:
S210:在接收到业务方针对目标消息的推送请求时,根据推送请求,创建目标推送任务。
在实际应用中,业务方在有消息需要推送给客户端时,可以发出相应的推送请求。在接收到业务方针对目标消息的推送请求时,可以根据推送请求,创建目标推送任务。目标消息可以是业务方要推送给客户端的任意一条消息。
推送请求中可以携带推送要求信息,如要将目标消息推送给哪些设备、哪些账号,目标消息的时效等。
在本申请的一种具体实施方式中,根据推送请求,可以确定目标消息是否为定时推送消息,如果是,则在达到目标消息对应的推送时刻时,生成目标推送任务。
可以理解的是,业务方当前针对目标消息的推送请求可能并非需要即时推送,目标消息可能为定时推送消息,即需要在某一特定推送时刻推送给客户端。根据推送请求,可以先确定目标消息是否为定时推送消息。如果确定目标消息为定时推送消息,则可以在达到目标消息对应的推送时刻时,生成目标推送任务。具体的,可以先将目标消息进行持久化存储,并记录目标消息对应的推送时刻,然后启动定时监控机制,对时间进行监控,在监控到目标消息对应的推送时刻时,生成目标推送任务。生成目标推送任务后,进而进行接下来的推送相关操作。如果确定目标消息非定时推送消息,表明业务方需要即时进行目标消息的推送,在这种情况下,可以即时创建目标推送任务。
当然,在接收到推送请求时,在进行消息推送之前,还可以针对目标消息进行推送前数据组装等推送前操作。
如果当前推送任务较多,可以将目标推送任务加入到消息队列中,逐一执行消息队列中的各推送任务,或者通过多线程方式同时执行多个推送任务。
S220:在所有已记录的客户端中确定推送对象。
用户在所使用设备中安装客户端后,在联网情况下,客户端可以与消息推送系统通信,消息推送系统即可记录该客户端的相关信息,如其所在设备的标识信息、其所在设备的别名信息、登录账号信息等。
在本申请实施例中,无论客户端当前在线与否,只要是曾与消息推送系统有过交互的,都为已记录的客户端。
在接收到业务方针对目标消息的推送请求,创建目标推送任务之后,可以在所有已记录的客户端中确定推送对象。即在所有已记录的客户端中选择一个或多个客户端,作为推送对象。
在本申请的一种具体实施方式中,可以根据目标推送任务的类型,在所有已记录的客户端中确定推送对象。
根据推送请求,创建的目标推送任务可以有多种类型,如全量在线推送类型、全量推送类型、指定推送类型等。举例而言,如果业务方当前要推送的目标消息对于在线用户意义较大,则创建的目标推送任务的类型可以是全量在线推送类型,即将目标消息推送给当前所有在线客户端,如果业务方当前要推送的目标消息为客户端更新消息,需要推送给所有客户端,则创建的目标推送任务的类型可以是全量推送类型,即将目标消息推送给所有客户端,无论在线与否,如果业务方需要针对某个或者某些客户端进行消息推送,则创建的目标推送任务的类型可以是指定推送类型,即将目标消息推送给指定的客户端。
可以根据目标推送任务的类型,在所有已记录的客户端中确定推送对象。
具体的,如果目标推送任务的类型为全量在线推送类型,即要将目标消息推送给当前所有在线的客户端,则可以先查询当前每个已记录的客户端的在线状态,将当前处于在线状态的所有客户端均确定为推送对象。
如果目标推送任务的类型为全量推送类型,即要将目标消息推送给所有客户端,则可以将所有已记录的客户端均确定为推送对象。
如果目标推送任务的类型为指定推送类型,即要将目标消息推送给指定的客户端,则可以根据推送请求,在所有已记录的客户端中确定指定客户端,将指定客户端确定为推送对象。具体的,可以通过标签信息、账号信息、设备标识、设备别名等指定。标签信息可以是用户在安装客户端时设定的一些标签,如关注的内容标签、职业标签等,或者客户端所在设备的地域标签等。业务方的推送请求中可以携带标签信息,即想要将目标消息推送给包含指定标签的客户端。账号信息可以是用户登录客户端所使用的账号,业务方的推送请求中可以携带账号信息,即想要将目标消息推送给包含指定账号的客户端。设备标识、设备别名可以是客户端主动上报的,业务方的推送请求中可以携带设备标识、设备别名等信息,即想要将目标消息推送给包含指定设备标识、设备别名的客户端。一个别名只能绑定到一个设备上,使用别名可以实现单点登录。一个账号可以绑定多个设备,一个设备可以对应多个账号,使用账号可以实现单账号多设备登录消息同步。
S230:基于目标推送任务,分别向每个推送对象推送目标消息。
在所有已记录的客户端中确定推送对象之后,可以基于目标推送任务,分别向每个推送对象推送目标消息。具体的,可以先查询得到每个推送对象对应的连接点,通过每个推送对象对应的连接点向相应的推送对象推送目标消息。还可以将目标推送任务分解为针对每个推送对象的细粒度的推送任务,并加入到消息队列中,通过推送管道、连接点等进行消息推送。
在本申请实施例中,客户端在线时,消息推送系统可以与客户端建立长链接通道,进行消息交互,客户端未在线时,消息推送系统与客户端之间不再存在长链接通道。
针对每个推送对象,如果该推送对象当前处于在线状态,则可以通过与该推送对象的长链接通道向该推送对象推送目标消息,如果该推送对象当前未处于在线状态,则可以通过该推送对象对应的厂商消息通道向该推送对象推送目标消息。
消息推送系统可以预先接入各个设备厂商的厂商消息通道,在推送对象未处于在线状态,无法使用长链接通道时,确定推送对象所在设备的厂商,通过该厂商的厂商消息通道向该推送对象推送目标消息。
也就是说,在进行消息推送时,消息推送系统可以动态选择长链接通道、厂商消息通道向客户端推送消息,提高了消息的触达成功率。
在本申请的一种具体实施方式中,在目标推送任务的类型为全量推送类型的情况下,针对每个推送对象,如果该推送对象当前处于在线状态,则可以向该推送对象推送目标消息,如果该推送对象当前未处于在线状态,则可以在监测到该推送对象上线后,确定包含目标消息的待推送消息,向该推送对象推送待推送消息。
如前所描述的,如果目标推送任务的类型为全量推送类型,则表明业务方要将目标消息推送给所有客户端,所有客户端均为推送对象。而有的客户端当前可能处于在线状态,有的客户端当前可能未处于在线状态。
针对每个推送对象,如果该推送对象当前处于在线状态,则可以直接向该推送对象推送目标消息,具体可以通过与该推送对象的长链接通道向该推送对象推送目标消息。
如果该推送对象当前未处于在线状态,则可以对该推送对象的状态进行监测,在监测到该推送对象上线后,与该推送对象的长链接通道再次建立起来,可以确定包含目标消息的待推送消息,将待推送消息推送给该推送对象。待推送消息至少包含目标消息,还可以包含在目标消息之后要推送给该推送对象的消息。
在进行待推送消息的确定时,可以先确定该推送对象已接收到的消息的最大序列号。该推送对象上线后,可以将自身已接收到的消息的最大序列号上报给消息推送系统,或者,消息推送系统在监测到该推送对象上线后,在该推送对象对应的消息列表中查找该推送对象已确认的消息的最大序列号。基于该推送对象对应的消息列表,可以确定包含目标消息的待推送消息,待推送消息的序列号均大于该最大序列号,即该推送对象对应的消息列表中序列号大于该最大序列号的消息均为未推送给该推送对象的消息。将该推送对象对应的消息列表中序列号大于该最大序列号的消息作为待推送消息,推送给该推送对象。
这样可以在客户端上线后,及时将未推送给客户端的消息推送出去,避免遗漏推送给客户端的消息。
举例说明,对于一个客户端而言,该客户端对应的消息列表中每个消息有其对应的序列号,按照消息接收的前后顺序,序列号不断增大。如在第一次消息推送中,该客户端处于在线状态,将该次的消息推送给该客户端,并将该次的消息以序列号1记录到该客户端对应的消息列表中,在第二次消息推送中,该客户端未处于在线状态,无法将该次的消息推送给该客户端,可以在该客户端对应的消息列表中以序列号2记录该消息,在第三次消息推送中,该客户端仍未上线,无法将该次的消息推送给该客户端,仍在该客户端对应的消息列表中以序列号3记录该消息,后续,当该客户端上线后,确定该客户端接收到的消息的最大序列号为1,通过该客户端对应的消息列表,可知,序列号为2、3的消息均未推送给该客户端,在这种情况下,可以将序列号为2、3的消息推送给该客户端。
在本申请的一种具体实施方式中,在目标推送任务的类型为全量推送类型或者指定推送类型的情况下,针对每个推送对象,如果该推送对象当前处于在线状态,则可以通过与该推送对象的长链接通道向该推送对象推送目标消息,如果该推送对象当前未处于在线状态,则可以通过该推送对象对应的厂商消息通道向该推送对象推送目标消息。
应用本申请实施例所提供的方法,在接收到业务方针对目标消息的推送请求时,可以根据推送请求,创建目标推送任务,在所有已记录的客户端中确定推送对象,分别向每个推送对象推送目标消息。在有目标消息要推送时,在所有已记录的客户端中确定推送对象,有针对性地向各个推送对象推送目标消息,尽量避免造成对用户的过多打扰,避免影响用户对客户端或设备的使用。
在本申请的一个实施例中,在接收到业务方针对目标消息的推送请求时,该方法还可以包括以下步骤:
在消息库中保存目标消息。
在本申请实施例中,可以预先建立一个消息库,在接收到业务方针对目标消息的推送请求时,可以在消息库中保存目标消息。这样,当需要延迟或者再次进行目标消息的推送时,可以从消息库中获取到目标消息。
业务方可以为要推送的消息进行时效设定,如一周内有效,或者两天内有效等。在消息库中保存目标消息时,即可添加上相应的时效信息。当消息库中保存的各消息达到各自时效时,可以从消息库中删除,以释放存储空间。
在本申请的一个实施例中,在所有已记录的客户端中确定推送对象之后,该方法还可以包括以下步骤:
步骤一:确定目标消息的索引信息,目标消息的索引信息包括目标消息的序列号和标识号,目标消息的序列号为自增序列号;
步骤二:在每个推送对象对应的消息列表中添加目标消息的索引信息。
为便于描述,将上述两个步骤结合起来进行说明。
在所有已记录的客户端中确定推送对象之后,可以确定目标消息的序列号和标识号,目标消息的序列号和标识号构成目标消息的索引信息,当然,目标消息的索引信息还可以包括其他信息,如时效信息等。
目标消息的序列号为自增序列号,具体可为64位消息序号,即每收到一个要推送给客户端的消息,即在前一个消息的序列号的基础上增大该消息的序列号,如每次自增1。
从存储利用率考虑,可以多个业务方共用一个消息序号存储。即无论是哪个业务方推送的消息,只要接收到消息推送请求,即采用自增方式生成该消息的序列号。如业务方X有对消息ax、bx、cx的推送请求,生成消息ax、bx、cx的序列号分别为1、2、3,业务方Y有对消息ay的推送请求,生成消息ay的序列号为4,如果业务方X再有对消息dx的推送请求,则生成消息dx的序列号为5。
目标消息的标识号可以根据目标消息的相关信息,如内容、时间等生成,或者在业务方发送的推送请求中携带目标消息的标识号。目标消息的标识号可以唯一标识目标消息。
每个客户端有其对应的消息列表。确定目标消息的索引信息后,可以在每个推送对象对应的消息列表中添加目标消息的索引信息。通过消息列表可以快速查找到相应消息。消息列表可以使用类redis zset存储。
在实际应用中,针对每个推送对象,可以基于该推送对象对应的消息列表中已有消息的序列号,确定目标消息的序列号,即不同客户端对应的消息列表中同一消息的序列号可能不同。
针对每个推送对象,在接收到该推送对象返回的针对目标消息的确认信息时,可以将该推送对象对应的消息列表中目标消息的索引信息标记为已确认状态,或者,在该推送对象对应的消息列表中删除目标消息的索引信息。客户端在接收到目标消息之后,可以向消息推送系统返回针对目标消息的确认信息,表明已接收到目标消息,消息推送成功。确认信息中可以携带目标消息的序列号。如果接收到某个推送对象返回的针对目标消息的确认信息,则可以通过解析该确认信息,获得目标消息的序列号,将该推送对象对应的消息列表中目标消息的索引信息标记为已确认状态,或者在该推送对象对应的消息列表中删除目标消息的索引信息。以通过该推送对象对应的消息列表,可以查询得到向该推送对象未推送成功的消息,以便于后续进行统计或者再次推送。
在本申请实施例中,还可以删除每个消息列表中达到预设时效的消息的索引信息。不同消息可能具有相同或不同时效,如一周、一天等,可以对消息列表中每个索引信息对应的消息进行时效监控,只要有消息达到预设时效,则将消息列表中该消息的索引信息删除,同时,还可以删除消息库中的该消息。
在本申请的一个实施例中,在分别向每个推送对象推送目标消息之后,该方法还可以包括以下步骤:
获得推送结果,并向业务方返回推送结果。
消息推送系统向每个推送对象推送目标消息之后,推送对象如果接收到目标消息,可返回针对目标消息的确认信息,如果接收到推送对象返回的确认信息,则表明消息推送成功,如果在设定时长内未接收到推送对象返回的确认信息,则可以根据实际需要,再次推送,直至重复推送次数达到设定阈值,可以确定消息推送失败。
消息推送系统基于是否接收到推送对象返回的确认信息,可以确定消息是否推送成功。获得推送结果后,可以向业务方返回推送结果。以便业务方及时了解到消息推送情况。
当然,消息推送系统还可以进行目标推送任务相关的统计操作,如总体统计以及分钟维度的统计等,统计维度可以有:任务关联的客户端数量、当前已推送的客户端数量、已收到确认信息的客户端数量、任务执行状态等。
需要说明的是,消息推送系统中可以保存设备标识与设备别名和账号信息的绑定关系,可以为设备/账号/别名绑定一个存储分区,如果要想指定设备推送目标消息,则通过该设备的设备标识与设备别名和账号信息的绑定关系,可以查找到该设备对应的消息列表。不同账号信息、不同设备标识、不同设备别名等均可对应不同的消息列表,当需要对消息列表进行更新时,可同时对有绑定关系的设备标识、设备别名、账号信息对应的消息列表同时进行更新。以保证消息列表写入的一致性。
本申请实施例可以应用于多种场景中,如全量在线推送场景、全量推送场景、单播推送场景、指定多客户端推送场景等。为便于理解,下面基于多种应用场景对本申请实施例进行更为具体的说明。
如图3所示,为全量在线推送场景的流程示意图,该流程包括以下步骤:
S31,推送接口在接收到针对目标消息的推送请求时,调用任务监测服务,创建全量在线推送任务;
S32,推送接口调用会话存储服务查询每个客户端的在线状态;
S33,推送接口调用所有组(set)的推送服务,向所有在线客户端推送消息;
S34,推送服务调用消息存储服务,保存目标消息和目标消息的索引信息;
S35,推送服务调用推送管道,推送目标消息;
S36,推送管道调用相应的连接点,连接点向相应的在线客户端推送目标消息;
S37,推送接口调用任务监测服务,上报推送结果。
如图4所示,为推送统计流程示意图,该流程包括以下步骤:
S41,客户端接收到目标消息后,向相应的连接点返回针对目标消息的确认信息;
S42,连接点向通知服务转发收到的确认信息;
S43,通知服务向推送服务转发收到的确认信息;
S44,推送服务确认客户端已收到目标消息,调用消息存储服务删除已确认的目标消息及相应消息列表中的目标消息的索引信息;
S45,推送服务调用任务监测服务,上报消息推送成功的状态;
S46,任务监测服务更新全量在线推送的统计结果。
图5所示,为全量推送场景的流程示意图,该流程可以包括以下步骤:
S51,推送接口调用任务监测服务,创建全量推送任务;
S52,推送接口调用会话存储服务,查询每个客户端的在线状态;
S53,推送接口调用所有组的推送服务,向所有在线客户端推送消息;
S54,推送服务调用消息存储服务,保存目标消息和目标消息的索引信息;
S55,推送服务调用推送管道,推送目标消息;
S56,推送管道调用相应的连接点,连接点向相应的在线客户端推送目标消息;
S57,推送接口调用任务监测服务,上报推送结果;
S58,当前处于未在线状态的客户端上线后,上报客户端侧已有消息的最大序列号,推送接口得到之前未在线客户端信息;
S59,推送接口调用推送服务主动向上线客户端推送大于其最大序列号的消息;
S591,推送服务调用消息存储服务在相应客户端对应的消息列表中保存目标消息的索引信息;
S592,推送服务调用推送管道,向上线客户端推送目标消息;
S593,推送管道调用相应的连接点,连接点向相应的上线客户端推送目标消息;
S594,推送接口调用任务监测服务,上报推送结果。
其中,在为当前处于在线状态的客户端进行消息推送时,可以直接调用全量在线推送接口。
图6所示,为单播推送场景的流程示意图,该流程可以包括以下步骤:
S61,推送接口调用推送服务,向指定客户端推送目标消息;
S62,推送服务查询会话存储服务,获取与该指定客户端对应的连接点的地址信息;
S63,推送服务调用消息存储服务保存目标消息和目标消息的索引信息;
S64,推送服务调用推送管道,使推送管道调用之前获取到连接点,向该指定客户端推送目标消息。
在指定多客户端推送的场景中,可以并发调用单播推送接口,不再赘述。
本申请实施例可以为业务侧开发者提供丰富的推送接口,既可以满足复杂的业务需求,又可以提高业务侧的开发效率。整个消息推送系统具有横向拓展性,对推送流程进行了优化处理,节约了服务器资源,提高了推送效率和触达率。
相应于上面的方法实施例,本申请实施例还提供了一种消息推送装置,下文描述的消息推送装置与上文描述的消息推送方法可相互对应参照。
参见图7所示,该装置可以包括以下模块:
推送任务创建模块710,用于在接收到业务方针对目标消息的推送请求时,根据推送请求,创建目标推送任务;
推送对象确定模块720,用于在所有已记录的客户端中确定推送对象;
消息推送模块730,用于基于目标推送任务,分别向每个推送对象推送目标消息。
在本申请的一种具体实施方式中,还包括消息保存模块,用于:
在接收到业务方针对目标消息的推送请求时,在消息库中保存目标消息。
在本申请的一种具体实施方式中,索引信息添加模块,用于:
在在所有已记录的客户端中确定推送对象之后,确定目标消息的索引信息,目标消息的索引信息包括目标消息的序列号和标识号,目标消息的序列号为自增序列号;
在每个推送对象对应的消息列表中添加目标消息的索引信息。
在本申请的一种具体实施方式中,还包括消息列表更新模块,用于:
针对每个推送对象,在接收到该推送对象返回的针对目标消息的确认信息时,将该推送对象对应的消息列表中目标消息的索引信息标记为已确认状态,或者,在该推送对象对应的消息列表中删除目标消息的索引信息。
在本申请的一种具体实施方式中,还包括索引信息删除模块,用于:
删除每个消息列表中达到预设时效的消息的索引信息。
在本申请的一种具体实施方式中,还包括推送结果返回模块,用于:
在分别向每个推送对象推送目标消息之后,获得推送结果;
向业务方返回推送结果。
在本申请的一种具体实施方式中,推送任务创建模块710,具体用于:
根据推送请求,确定目标消息是否为定时推送消息;
如果是,则在达到目标消息对应的推送时刻时,生成目标推送任务。
在本申请的一种具体实施方式中,推送对象确定模块720,具体用于:
根据目标推送任务的类型,在所有已记录的客户端中确定推送对象。
在本申请的一种具体实施方式中,推送对象确定模块720,具体用于:
如果目标推送任务的类型为全量在线推送类型,则查询当前每个已记录的客户端的在线状态,将当前处于在线状态的所有客户端均确定为推送对象;
如果目标推送任务的类型为全量推送类型,则将所有已记录的客户端均确定为推送对象;
如果目标推送任务的类型为指定推送类型,则根据推送请求,在所有已记录的客户端中确定指定客户端,将指定客户端确定为推送对象。
在本申请的一种具体实施方式中,目标推送任务的类型为全量推送类型,消息推送模块730,具体用于:
针对每个推送对象,如果该推送对象当前处于在线状态,则向该推送对象推送目标消息;
如果该推送对象当前未处于在线状态,则在监测到该推送对象上线后,确定包含目标消息的待推送消息,向该推送对象推送待推送消息。
在本申请的一种具体实施方式中,还包括待推送消息确定模块,用于:
确定该推送对象已接收到的消息的最大序列号;
基于该推送对象对应的消息列表,确定包含目标消息的待推送消息,待推送消息的序列号均大于该最大序列号。
在本申请的一种具体实施方式中,目标推送任务的类型为全量推送类型或指定推送类型,消息推送模块730,具体用于:
针对每个推送对象,如果该推送对象当前处于在线状态,则通过与该推送对象的长链接通道向该推送对象推送目标消息;
如果该推送对象当前未处于在线状态,则通过该推送对象对应的厂商消息通道向该推送对象推送目标消息。
相应于上面的方法实施例,本申请实施例还提供了一种消息推送设备,如图8所示,该设备包括:
存储器810,用于存储计算机程序;
处理器820,用于执行计算机程序时实现上述消息推送方法的步骤。
相应于上面的方法实施例,本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述消息推送方法的步骤。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
Claims (12)
1.一种消息推送方法,其特征在于,包括:
在接收到业务方针对目标消息的推送请求时,根据所述推送请求,创建目标推送任务;
在所有已记录的客户端中确定推送对象;
确定所述目标消息的索引信息,所述目标消息的索引信息包括所述目标消息的序列号和标识号,所述目标消息的序列号为自增序列号;
在每个推送对象对应的消息列表中添加所述目标消息的索引信息;
基于所述目标推送任务,分别向每个推送对象推送所述目标消息;
针对每个推送对象,在接收到该推送对象返回的针对所述目标消息的确认信息时,将该推送对象对应的消息列表中所述目标消息的索引信息标记为已确认状态,或者,在该推送对象对应的消息列表中删除所述目标消息的索引信息;
其中,所述在所有已记录的客户端中确定推送对象,包括:根据所述目标推送任务的类型,在所有已记录的客户端中确定推送对象;
所述根据所述目标推送任务的类型,在所有已记录的客户端中确定推送对象,包括:
如果所述目标推送任务的类型为全量在线推送类型,则查询当前每个已记录的客户端的在线状态,将当前处于在线状态的所有客户端均确定为推送对象。
2.根据权利要求1所述的方法,其特征在于,在接收到业务方针对目标消息的推送请求时,还包括:
在消息库中保存所述目标消息。
3.根据权利要求1所述的方法,其特征在于,还包括:
删除每个消息列表中达到预设时效的消息的索引信息。
4.根据权利要求1所述的方法,其特征在于,在所述分别向每个推送对象推送所述目标消息之后,还包括:
获得推送结果;
向所述业务方返回所述推送结果。
5.根据权利要求1所述的方法,其特征在于,所述根据所述推送请求,创建目标推送任务,包括:
根据所述推送请求,确定所述目标消息是否为定时推送消息;
如果是,则在达到所述目标消息对应的推送时刻时,生成目标推送任务。
6.根据权利要求1所述的方法,其特征在于,所述根据所述目标推送任务的类型,在所有已记录的客户端中确定推送对象,包括:
如果所述目标推送任务的类型为全量推送类型,则将所有已记录的客户端均确定为推送对象;
如果所述目标推送任务的类型为指定推送类型,则根据所述推送请求,在所有已记录的客户端中确定指定客户端,将所述指定客户端确定为推送对象。
7.根据权利要求6所述的方法,其特征在于,所述目标推送任务的类型为全量推送类型,所述分别向每个推送对象推送所述目标消息,包括:
针对每个推送对象,如果该推送对象当前处于在线状态,则向该推送对象推送所述目标消息;
如果该推送对象当前未处于在线状态,则在监测到该推送对象上线后,确定包含所述目标消息的待推送消息,向该推送对象推送所述待推送消息。
8.根据权利要求7所述的方法,其特征在于,所述确定包含所述目标消息的待推送消息,包括:
确定该推送对象已接收到的消息的最大序列号;
基于该推送对象对应的消息列表,确定包含所述目标消息的待推送消息,所述待推送消息的序列号均大于该最大序列号。
9.根据权利要求1所述的方法,其特征在于,所述目标推送任务的类型为全量推送类型或指定推送类型,所述分别向每个推送对象推送所述目标消息,包括:
针对每个推送对象,如果该推送对象当前处于在线状态,则通过与该推送对象的长链接通道向该推送对象推送所述目标消息;
如果该推送对象当前未处于在线状态,则通过该推送对象对应的厂商消息通道向该推送对象推送所述目标消息。
10.一种消息推送装置,其特征在于,包括:
推送任务创建模块,用于在接收到业务方针对目标消息的推送请求时,根据所述推送请求,创建目标推送任务;
推送对象确定模块,用于在所有已记录的客户端中确定推送对象;
索引信息添加模块,用于确定目标消息的索引信息,目标消息的索引信息包括目标消息的序列号和标识号,目标消息的序列号为自增序列号,并在每个推送对象对应的消息列表中添加目标消息的索引信息;
消息推送模块,用于基于所述目标推送任务,分别向每个推送对象推送所述目标消息;
消息列表更新模块,用于针对每个推送对象,在接收到该推送对象返回的针对目标消息的确认信息时,将该推送对象对应的消息列表中目标消息的索引信息标记为已确认状态,或者,在该推送对象对应的消息列表中删除目标消息的索引信息;
推送对象确定模块,具体用于:
如果目标推送任务的类型为全量在线推送类型,则查询当前每个已记录的客户端的在线状态,将当前处于在线状态的所有客户端均确定为推送对象。
11.一种消息推送设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至9任一项所述消息推送方法的步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至9任一项所述消息推送方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910666781.0A CN110417884B (zh) | 2019-07-23 | 2019-07-23 | 一种消息推送方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910666781.0A CN110417884B (zh) | 2019-07-23 | 2019-07-23 | 一种消息推送方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110417884A CN110417884A (zh) | 2019-11-05 |
CN110417884B true CN110417884B (zh) | 2021-10-08 |
Family
ID=68362663
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910666781.0A Active CN110417884B (zh) | 2019-07-23 | 2019-07-23 | 一种消息推送方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110417884B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111464599B (zh) * | 2020-03-20 | 2021-05-07 | 腾讯科技(深圳)有限公司 | 消息推送方法、系统、装置、计算机可读存储介质及设备 |
CN113839983A (zh) * | 2020-06-24 | 2021-12-24 | 优信数享(北京)信息技术有限公司 | 一种sem推送方法、系统及装置 |
CN111901619B (zh) * | 2020-07-23 | 2023-10-31 | 北京达佳互联信息技术有限公司 | 一种消息推送方法和装置 |
CN112256954A (zh) * | 2020-09-08 | 2021-01-22 | 国网宁夏电力有限公司经济技术研究院 | 一种消息推送的处理方法及相关系统 |
CN112532681A (zh) * | 2020-10-16 | 2021-03-19 | 深圳市科漫达智能管理科技有限公司 | 一种停车场软件数据异常处理方法及装置 |
CN112367246B (zh) * | 2020-10-30 | 2022-06-17 | 深圳壹账通智能科技有限公司 | 消息推送方法、装置、电子设备及存储介质 |
CN114979097B (zh) * | 2021-06-03 | 2023-07-21 | 中移互联网有限公司 | 基于mqtt的消息推送方法、装置及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107528922A (zh) * | 2017-09-29 | 2017-12-29 | 深圳市金立通信设备有限公司 | 一种消息推送方法、终端及计算机可读存储介质 |
CN109413216A (zh) * | 2018-12-29 | 2019-03-01 | 微梦创科网络科技(中国)有限公司 | 一种信息推送方法、装置及移动终端 |
CN109948046A (zh) * | 2018-01-05 | 2019-06-28 | 深圳壹账通智能科技有限公司 | 消息推送方法、装置、移动终端和存储介质 |
CN110020262A (zh) * | 2018-08-14 | 2019-07-16 | 深圳壹账通智能科技有限公司 | 推送信息发送方法、装置、计算机设备和存储介质 |
-
2019
- 2019-07-23 CN CN201910666781.0A patent/CN110417884B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107528922A (zh) * | 2017-09-29 | 2017-12-29 | 深圳市金立通信设备有限公司 | 一种消息推送方法、终端及计算机可读存储介质 |
CN109948046A (zh) * | 2018-01-05 | 2019-06-28 | 深圳壹账通智能科技有限公司 | 消息推送方法、装置、移动终端和存储介质 |
CN110020262A (zh) * | 2018-08-14 | 2019-07-16 | 深圳壹账通智能科技有限公司 | 推送信息发送方法、装置、计算机设备和存储介质 |
CN109413216A (zh) * | 2018-12-29 | 2019-03-01 | 微梦创科网络科技(中国)有限公司 | 一种信息推送方法、装置及移动终端 |
Also Published As
Publication number | Publication date |
---|---|
CN110417884A (zh) | 2019-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110417884B (zh) | 一种消息推送方法、装置、设备及存储介质 | |
CN110351283B (zh) | 一种数据传输方法、装置、设备及存储介质 | |
CN107105050B (zh) | 一种业务对象的存储、下载方法及系统 | |
CN112860451A (zh) | 一种基于SaaS的多租户数据处理方法和装置 | |
CN105471716A (zh) | 实现跨客户端消息同步的方法、用户设备及服务器 | |
WO2021051747A1 (zh) | 数据更新方法、系统、装置、电子设备及计算机存储介质 | |
CN112788126B (zh) | 资源下载方法、装置、服务器和存储介质 | |
CN107395559B (zh) | 基于redis的数据处理方法及设备 | |
CN113572835B (zh) | 一种数据处理方法、网元设备以及可读存储介质 | |
CN113391979A (zh) | 监控数据展示的处理方法、设备、系统及存储介质 | |
CN111277639A (zh) | 一种保持数据一致性的方法和装置 | |
CN114328618A (zh) | 一种缓存数据同步方法、装置、设备及存储介质 | |
CN116668511A (zh) | 一种数据处理方法、网元设备以及可读存储介质 | |
CN114302350B (zh) | 业务提供方故障切换方法、装置、电子设备和存储介质 | |
CN116566984A (zh) | 一种k8s容器集群的路由信息创建方法、装置及电子设备 | |
CN108279924A (zh) | 程序发布方法及装置 | |
CN109194706B (zh) | 网络资源拨测方法及终端 | |
CN110324384B (zh) | 数据推送的方法和装置 | |
WO2024074091A1 (zh) | 一种sip动态负载均衡方法、系统、设备和存储介质 | |
CN113342764A (zh) | 不同云端服务器之间的数据同步方法及装置 | |
CN113595894B (zh) | 服务节点间、客户端节点间通信方法、装置、设备及介质 | |
CN115567388A (zh) | 网络切片配置自动更新方法、系统、装置及存储介质 | |
CN115629909A (zh) | 业务数据处理的方法、装置、电子设备和存储介质 | |
CN113115059B (zh) | 弹幕连接监控方法、装置、设备及存储介质 | |
CN110995890B (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 |