本申请涉及通信领域,尤其涉及一种用于推送消息的技术。
背景技术:
随着时代的发展,推送系统向用户设备发送的推送信息也越来越多样化,如推送信息可以为广告或通知等信息,用户设备中需要显示服务器发送的推送信息,以使用户浏览该推送信息,达到提高推送信息的关注度的效果。现有技术中的推送系统采用串行处理方式,会存在中间件的性能瓶颈问题、服务器的硬件配置缺陷问题以及吞吐量不足、速度慢的问题。
技术实现要素:
本申请的一个目的是提供一种推送消息的方法与设备。
根据本申请的一个方面,提供了一种推送消息的方法,该方法包括:
接收用户设备发送的推送消息发送请求,其中,所述推送消息发送请求包括推送消息及所述用户设备对应的第一标识信息,所述推送消息包括推送消息内容及推送用户对应的第二标识信息;
将所述第一标识信息提供给鉴权模块,通过所述鉴权模块对所述第一标识信息进行验证,若验证通过,基于远程过程调用方式通过多个并行检查模块各自提供的第一远程调用接口将所述推送消息分别提供给所述多个并行检查模块;
对于所述多个并行检查模块中的每个并行检查模块,通过该并行检查模块对所述推送消息进行检查,若检查通过,基于消息中间件向第一消息队列发送检查通过指示信息,其中,所述检查通过指示信息包括所述推送消息;
若通过推送通道选择模块从所述第一消息队列获取到的包括所述推送消息的检查通过指示信息的数量等于所述多个并行检查模块的数量,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息;
通过推送通道选择模块从所述第二消息队列获取所述推送指示信息,根据所述第三标识信息,将所述推送消息内容通过所述第三标识信息对应的推送通道推送给所述第二标识信息对应的用户设备。
根据本申请的一个方面,提供了一种推送消息的网络设备,该设备包括:
一一模块,用于接收用户设备发送的推送消息发送请求,其中,所述推送消息发送请求包括推送消息及所述用户设备对应的第一标识信息,所述推送消息包括推送消息内容及推送用户对应的第二标识信息;
一二模块,用于将所述第一标识信息提供给鉴权模块,通过所述鉴权模块对所述第一标识信息进行验证,若验证通过,基于远程过程调用方式通过多个并行检查模块各自提供的第一远程调用接口将所述推送消息分别提供给所述多个并行检查模块;
一三模块,用于对于所述多个并行检查模块中的每个并行检查模块,通过该并行检查模块对所述推送消息进行检查,若检查通过,基于消息中间件向第一消息队列发送检查通过指示信息,其中,所述检查通过指示信息包括所述推送消息;
一四模块,用于若通过推送通道选择模块从所述第一消息队列获取到的包括所述推送消息的检查通过指示信息的数量等于所述多个并行检查模块的数量,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息;
一五模块,用于通过推送通道发送模块从所述第二消息队列获取所述推送指示信息,根据所述第三标识信息,将所述推送消息内容通过所述第三标识信息对应的推送通道推送给所述第二标识信息对应的用户设备。
根据本申请的一个方面,提供了一种推送消息的设备,其中,该设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如下操作:
接收用户设备发送的推送消息发送请求,其中,所述推送消息发送请求包括推送消息及所述用户设备对应的第一标识信息,所述推送消息包括推送消息内容及推送用户对应的第二标识信息;
将所述第一标识信息提供给鉴权模块,通过所述鉴权模块对所述第一标识信息进行验证,若验证通过,基于远程过程调用方式通过多个并行检查模块各自提供的第一远程调用接口将所述推送消息分别提供给所述多个并行检查模块;
对于所述多个并行检查模块中的每个并行检查模块,通过该并行检查模块对所述推送消息进行检查,若检查通过,基于消息中间件向第一消息队列发送检查通过指示信息,其中,所述检查通过指示信息包括所述推送消息;
若通过推送通道选择模块从所述第一消息队列获取到的包括所述推送消息的检查通过指示信息的数量等于所述多个并行检查模块的数量,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息;
通过推送通道发送模块从所述第二消息队列获取所述推送指示信息,根据所述第三标识信息,将所述推送消息内容通过所述第三标识信息对应的推送通道推送给所述第二标识信息对应的用户设备。
根据本申请的一个方面,提供了一种存储指令的计算机可读介质,所述指令在被执行时使得系统进行如下操作:
接收用户设备发送的推送消息发送请求,其中,所述推送消息发送请求包括推送消息及所述用户设备对应的第一标识信息,所述推送消息包括推送消息内容及推送用户对应的第二标识信息;
将所述第一标识信息提供给鉴权模块,通过所述鉴权模块对所述第一标识信息进行验证,若验证通过,基于远程过程调用方式通过多个并行检查模块各自提供的第一远程调用接口将所述推送消息分别提供给所述多个并行检查模块;
对于所述多个并行检查模块中的每个并行检查模块,通过该并行检查模块对所述推送消息进行检查,若检查通过,基于消息中间件向第一消息队列发送检查通过指示信息,其中,所述检查通过指示信息包括所述推送消息;
若通过推送通道选择模块从所述第一消息队列获取到的包括所述推送消息的检查通过指示信息的数量等于所述多个并行检查模块的数量,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息;
通过推送通道发送模块从所述第二消息队列获取所述推送指示信息,根据所述第三标识信息,将所述推送消息内容通过所述第三标识信息对应的推送通道推送给所述第二标识信息对应的用户设备。
与现有技术相比,本申请中的消息推送系统通过多个并行检查模块实现了推送消息检查过程的并行处理,并将鉴权模块、多个并行检查模块、推送通道选择模块以及推送通道选择模块通过远程过程调用方式及消息队列方式连接起来,从而可以使得消息推送系统中的各个功能模块互相之间解耦,并且能够提高消息推送中间件的性能,解决现有技术中存在的中间件性能瓶颈问题,能够有效地提高推送消息的吞吐量及消息推送速度,提高消息推送的效率及稳定性。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个实施例的一种推送消息的方法流程图;
图2示出根据本申请一个实施例的一种推送消息的网络设备结构图;
图3示出可被用于实施本申请中所述的各个实施例的示例性系统。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(例如,中央处理器(centralprocessingunit,cpu))、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(randomaccessmemory,ram)和/或非易失性内存等形式,如只读存储器(readonlymemory,rom)或闪存(flashmemory)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(phase-changememory,pcm)、可编程随机存取存储器(programmablerandomaccessmemory,pram)、静态随机存取存储器(staticrandom-accessmemory,sram)、动态随机存取存储器(dynamicrandomaccessmemory,dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(electrically-erasableprogrammableread-onlymemory,eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(compactdiscread-onlymemory,cd-rom)、数字多功能光盘(digitalversatiledisc,dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本申请所指设备包括但不限于用户设备、网络设备、或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备包括但不限于任何一种可与用户进行人机交互(例如通过触摸板进行人机交互)的移动电子产品,例如智能手机、平板电脑等,所述移动电子产品可以采用任意操作系统,如android操作系统、ios操作系统等。其中,所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(applicationspecificintegratedcircuit,asic)、可编程逻辑器件(programmablelogicdevice,pld)、现场可编程门阵列(fieldprogrammablegatearray,fpga)、数字信号处理器(digitalsignalprocessor,dsp)、嵌入式设备等。所述网络设备包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云;在此,云由基于云计算(cloudcomputing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。所述网络包括但不限于互联网、广域网、城域网、局域网、vpn网络、无线自组织网络(adhoc网络)等。优选地,所述设备还可以是运行于所述用户设备、网络设备、或用户设备与网络设备、网络设备、触摸终端或网络设备与触摸终端通过网络相集成所构成的设备上的程序。
当然,本领域技术人员应能理解上述设备仅为举例,其他现有的或今后可能出现的设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
在本申请的描述中,“多个”的含义是两个或者更多,除非另有明确具体的限定。
图1示出根据本申请一个实施例的一种推送消息的方法流程图,该方法包括步骤s11、步骤s12、步骤s13、步骤s14和步骤s15。在步骤s11中,网络设备接收用户设备发送的推送消息发送请求,其中,所述推送消息发送请求包括推送消息及所述用户设备对应的第一标识信息,所述推送消息包括推送消息内容及推送用户对应的第二标识信息;在步骤s12中,网络设备将所述第一标识信息提供给鉴权模块,通过所述鉴权模块对所述第一标识信息进行验证,若验证通过,基于远程过程调用方式通过多个并行检查模块各自提供的第一远程调用接口将所述推送消息分别提供给所述多个并行检查模块;在步骤s13中,网络设备对于所述多个并行检查模块中的每个并行检查模块,通过该并行检查模块对所述推送消息进行检查,若检查通过,基于消息中间件向第一消息队列发送检查通过指示信息,其中,所述检查通过指示信息包括所述推送消息;在步骤s14中,网络设备若通过推送通道选择模块从所述第一消息队列获取到的包括所述推送消息的检查通过指示信息的数量等于所述多个并行检查模块的数量,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息;在步骤s15中,网络设备通过推送通道发送模块从所述第二消息队列获取所述推送指示信息,根据所述第三标识信息,将所述推送消息内容通过所述第三标识信息对应的推送通道推送给所述第二标识信息对应的用户设备。
在步骤s11中,网络设备接收用户设备发送的推送消息发送请求,其中,所述推送消息发送请求包括推送消息及所述用户设备对应的第一标识信息,所述推送消息包括推送消息内容及推送用户对应的第二标识信息。在一些实施例中,消息推送系统可以运行在一个网络设备上,或者,也可以运行在多个网络设备上。在一些实施例中,第一标识信息可以是推送消息发送方的用户设备的设备标识信息,或者,也可以是推送消息发送方的用户标识信息。在一些实施例中,网络设备通过某个推送通道将推送消息内容推送给第二标识信息所标识的推送消息接收方的用户设备,并在该用户设备的消息通知栏或该推送消息内容对应的目标应用呈现该推送消息内容。在一些实施例中,推送用户是接收推送消息内容的用户,即推送消息接收方。在一些实施例中,第二标识信息可以是推送用户的标识信息,或者,也可以是推送用户所使用的用户设备的标识信息。在一些实施例中,第二标识信息可以用于标识该推送消息内容对应的目标应用中的单个用户,或者,也可以用于标识该目标应用中的多个用户,或者,还可以用于标识该目标应用中的所有用户。
在步骤s12中,网络设备将所述第一标识信息提供给鉴权模块,通过所述鉴权模块对所述第一标识信息进行验证,若验证通过,基于远程过程调用方式通过多个并行检查模块各自提供的第一远程调用接口将所述推送消息分别提供给所述多个并行检查模块。在一些实施例中,鉴权模块是网络设备中的一个独立模块,用于对用户设备或使用该用户设备发送推送消息发送请求的推送消息发送方是否具有推送消息的权限进行验证,可以是验证是否具有推送权限,或者,也可以是验证在当前时间是否具有推送权限,或者,还可以是验证对于该推送消息是否具有推送权限。在一些实施例中,若验证未通过,会生成鉴权失败指示信息并返回给网络设备,并通过网络设备返回给用户设备进行呈现。在一些实施例中,远程过程调用(rpc,remoteprocedurecall)是指计算机a上的进程,调用计算机a上的另外一个进程或者调用另外一台计算机b上的一个进程,其中a上的调用进程被挂起,而b上的被调用进程开始执行,当值返回给a时,a进程继续执行,调用方可以通过被调用方提供的接口将传入参数传送给被调用方,被调用方在对该参数信息进行处理后可以将处理结果作为返回参数传回给调用方。在一些实施例中,该多个并行检查模块互相之间是并行运行的,该多个并行检查模块可以与鉴权模块位于同一个网络设备中,或者,也可以分别位于两个不同的网络设备中,或者,该多个并行检查模块互相之间也可以分别位于不同的网络设备中。在一些实施例中,多个并行检查模块用于对推送消息进行检查,该多个并行检查模块可以基于远程过程调用方式各自分别提供第一远程调用接口。在一些实施例中,鉴权模块在验证通过后,会将验证通过的验证结果信息返回给网络设备,然后网络设备可以基于远程过程调用方式通过第一远程调用接口将推送消息分别提供给该多个并行检查模块。在一些实施例中,鉴权模块在验证通过后,可以直接基于远程过程调用方式通过第一远程调用接口将推送消息分别提供给该多个并行检查模块。
在步骤s13中,网络设备对于所述多个并行检查模块中的每个并行检查模块,通过该并行检查模块对所述推送消息进行检查,若检查通过,基于消息中间件向第一消息队列发送检查通过指示信息,其中,所述检查通过指示信息包括所述推送消息。在一些实施例中,每个并行检查模块会对推送消息进行检查,若检查通过,会生成包括该推送消息的检查通过指示信息,并发送给第一消息队列。在一些实施例中,消息队列(mq,messagequeue)是基础数据结构中“先进先出”的一种数据机构,指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递,生产者产生消息并把消息放入队列,然后由消费者去处理,消费者可以从队列中拉取消息,或者,消费者还可以订阅该队列由该队列来给其主动推送消息。在一些实施例中,可以只有一个第一消息队列,各个并行检查模块在检查通过后均会将推送消息发送给该第一消息队列。在一些实施例中,可以有多个第一消息队列,每个并行检查模块各自对应一个不同的第一消息队列,每个并行检查模块在检查通过后会将推送消息发送给该并行检查模块对应的第一消息队列。在一些实施例中,消息中间件作为第一消息队列的运行载体,通过高效可靠的消息传递机制来管理、支撑、维护第一消息队列的数据通信。
在步骤s14中,网络设备若通过推送通道选择模块从所述第一消息队列获取到的包括所述推送消息的检查通过指示信息的数量等于所述多个并行检查模块的数量,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息。在一些实施例中,通道选择模块可以直接从第一消息队列中拉取检查通过指示信息,或者,还可以订阅第一消息队列由第一消息队列来给其主动推送检查通过指示信息。在一些实施例中,只有在从第一消息队列中获取到的包括该推送消息的检查通过指示信息的数量等于该多个并行检查模块的数量的情况下,推送通道选择模块才会开始确定该推送消息对应的推送通道。例如,存在3个并行检查模块,每个并行检查模块会对推送消息进行检查并在检查通过后将对应的检查通过指示信息发送给第一消息队列,通道选择模块只有在已经获取到该3个并行检查模块分别发送的包含该推送消息的检查通过指示信息后,才会开始确定该推送消息对应的推送通道。在一些实施例中,推送通道选择模块可以与该多个并行检查模块位于同一个网络设备中,或者,消息中间件包括对应的消息服务器或消息队列服务器,此时,推送通道选择模块可以与该多个并行检查模块分别位于不同的网络设备中。在一些实施例中,推送通道包括目标应用自有通道和厂商通道,自有通道需要目标应用自己建立和维护与目标应用对应的后台推送服务器之间的连接,只有当目标应用存活在用户设备的内存中且目标应用与目标应用对应的后台推送服务器之间的连接为活跃状态时,目标应用对应的后台推送服务器才可以通过自有通道将推送消息内容推送给用户设备,厂商通道是各个用户设备品牌在用户设备系统中建立的每个用户设备与该用户设备品牌对应的后台推送服务器之间的连接,目标应用对应的后台推送服务器可以通过接入各种厂商通道来将推送消息内容推送给用户设备。在一些实施例中,不同的推送用户对应不同的默认推送通道(目标应用自有通道或厂商通道),推送通道选择模块会检查推送用户是否具有默认推送通道的发送权限,若具有,则会选择该默认推送通道进行消息推送,否则,则会选择除该默认推送通道以外的其他推送通道进行消息推送。在一些实施例中,会先通过默认推送通道进行消息推送,在默认推送通道推送失败后,会通过除默认推送通道以外的其他推送通道进行消息推送。在一些实施例中,默认推送通道为厂商通道,会首先检查目标应用对应的后台推送服务器是否接入了该厂商通道,若接入,则会优先通过该厂商通道进行消息推送,在厂商通道推送失败的情况下,会通过自有通道来推送消息。在一些实施例中,不同的推送通道有不同的限制条件,比如推送标题内容,推送内容长度,每日推送条数限制等,推送通道选择模块需要根据推送消息来确定适合该推送消息的推送通道。在一些实施例中,推送通道选择模块在确定完推送消息对应的推送通道后,会生成包括该推送消息与用于标识该推送通道的第三标识信息的推送指示信息,并发送给第二消息队列。
在步骤s15中,网络设备通过推送通道发送模块从所述第二消息队列获取所述推送指示信息,根据所述第三标识信息,将所述推送消息内容通过所述第三标识信息对应的推送通道推送给所述第二标识信息对应的用户设备。在一些实施例中,推送通道发送模块可以与推送通道选择模块位于同一个网络设备中,或者,推送通道发送模块还可以与推送通道选择模块分别位于不同的网络设备中。在一些实施例中,推送通道发送模块从第二消息队列获取包括该推送消息与用于标识该推送通道的第三标识信息的推送指示信息,根据推送消息中包括的用于标识推送用户的第二标识信息,将推送消息中包括的推送消息内容通过第三标识信息所标识的推送通道推送给第二标识信息所标识的用户设备。在一些实施例中,若推送通道为目标应用自有通道,则推送通道发送模块可以直接将该推送消息内容推送给用户设备,若推送通道为厂商通道,则推送通道发送模块需要先将该推送消息内容发送给该用户设备品牌对应的后台推送服务器,然后该后台推送服务器再通过其对应的厂商通道将该推送消息内容推送给用户设备。在一些实施例中,推送通道发送模块还会将推送消息内容转换成推送通道所支持的消息格式。在一些实施例中,推送通道发送模块在通过推送通道给用户设备推送完推送消息内容后,会监听该用户设备异步返回的推送结果信息或推送反馈信息。
本申请中的消息推送系统通过多个并行检查模块实现了推送消息检查过程的并行处理,并将鉴权模块、多个并行检查模块、推送通道选择模块以及推送通道选择模块通过远程过程调用方式及消息队列方式连接起来,从而可以使得消息推送系统中的各个功能模块互相之间解耦,并且能够提高消息推送中间件的性能,解决现有技术中存在的中间件性能瓶颈问题,能够有效地提高推送消息的吞吐量及消息推送速度,提高消息推送的效率及稳定性。
在一些实施例中,所述多个并行检查模块包括频控模块、去重模块及敏感词模块,所述频控模块用于对所述推送消息进行频控检查,所述去重模块用于对所述推送消息进行去重检查,所述敏感词模块用于对所述推送消息进行敏感词检查。在一些实施例中,频控模块会限制每个用户设备在预定时间范围内(例如,每天)接收到的推送消息数量,若超过限制,则验证不通过不予推送。在一些实施例中,频控模块会限制每个推送消息发送方在预定时间范围内发送的推送消息输入,超过限制,则验证不通过不予推送。在一些实施例中,频控模块会检查发送该推送消息发送请求的推送消息发送方当前已发送的推送消息数量是否超过限制,若是,视为验证未通过,否则,再检查该第二标识信息所标识的推送用户当前已接收的推送消息数量是否超过限制,若否,才视为验证通过,否则,视为验证未通过。在一些实施例中,去重模块会限制每个用户设备在预定时间范围内接收到的推送消息内容不能完全相同,或者,推送消息内容的标题内容不能完全相同。在一些实施例中,网络设备会对推送成功的推送消息内容或标题内容进行md5(message-digestalgorithm)处理,并将生成的散列信息存在网络设备的缓存或文件中,对于每个待推送消息,去重模块会检查网络设备的缓存或文件中是否存在与该待推送消息对应相同推送消息内容或标题内容的已推送消息,若存在,则视为验证未通过,不予推送,否则,视为验证通过。在一些实施例中,网络设备会建立敏感词词库,对于每个待推送消息,敏感词模块会检查该待推送消息中的推送消息内容或标题内容是否命中敏感词词库中的敏感词,若命中,则视为验证未通过,不予推送,否则,视为验证通过。
在一些实施例中,所述远程过程调用方式采用grpc。在一些实施例中,grpc是由google开发,是一款语言中立、平台中立、开源的、轻量级的远程过程调用(rpc)系统,在grpc里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,能够更容易地创建分布式应用和服务,与许多rpc系统类似,grpc也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型),在服务端实现这个接口,并运行一个grpc服务器来处理客户端调用,在客户端拥有一个存根能够像服务端一样的方法,具体可以参考“http://doc.oschina.net/grpc?t=58008”(grpc官方文档中文版)。
在一些实施例中,所述步骤s13还包括:若对于该并行检查模块的检查未通过,网络设备生成推送失败指示信息;将所述推送失败指示信息通过所述远程过程调用方式提供给网络设备,以通过所述网络设备将所述推送失败指示信息返回给所述用户设备。在一些实施例中,对于每个并行检查模块,该并行检查模块对该推送消息进行检查,若检查未通过,则生成推送失败指示信息并通过该远程过程调用方式提供给网络设备,然后通过网络设备将该推送失败指示信息返回给推送消息发送方的用户设备,从而使得消息发送方可以直接得知待推送消息是因为什么原因被限制推送了,可以直接得到待推送消息是否被频控、去重、敏感词等消息检查逻辑给限制了。在一些实施例中,推送失败指示信息可以包括但不限于推送消息的标识信息、该并行检查模块的模块标识信息、检查未通过的原因信息。
在一些实施例中,所述将所述推送失败指示信息通过所述远程过程调用方式提供给网络设备,包括:将所述推送失败指示信息作为所述第一远程调用接口的返回结果同步提供给所述网络设备。在一些实施例中,该并行检查模块可以将推送失败指示信息作为该并行检查模块提供的第一远程调用接口在被调用时的返回结果同步提供给鉴权模块或网络设备。
在一些实施例中,所述将所述推送失败指示信息通过所述远程过程调用方式提供给网络设备,包括:基于所述远程过程调用方式将所述推送消息通过所述网络设备提供的第二远程调用接口异步提供给所述网络设备。在一些实施例中,该并行检查模块可以基于该远程过程调用方式通过鉴权模块或网络设备提供的第二远程调用接口,将推送失败指示信息异步提供给鉴权模块或网络设备。
在一些实施例中,所述消息中间件为rabbitmq。在一些实施例中,rabbitmq是使用erlang语言开发的开源消息队列中间件,基于amqp(advancedmessagequeuingprotocol,高级消息队列协议)协议来实现,amqp的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全,rabbitmq可以为应用程序提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全,通过将消息的发送和接收分离来实现应用程序的异步和解耦,具体可以参考“http://rabbitmq.mr-ping.com/”(rabbitmq中文文档)。
在一些实施例中,所述检查通过指示信息包括并行检查模块对应的模块标识信息。在一些实施例中,对于每个并行检查模块,该并行检查模块会对推送消息进行检查,若检查通过,会生成包括该并行检查模块的模块标识信息的检查通过指示信息,并基于消息中间件发送给第一消息队列。
在一些实施例中,所述第一消息队列为多个,每个并行检查模块分别对应一个第一消息队列;其中,所述若检查通过,基于消息中间件将检查通过指示信息发送给第一消息队列,包括:若检查通过,基于消息中间件将检查通过指示信息发送给该并行检查模块对应的第一消息队列。在一些实施例中,存在多个第一消息队列,每个并行检查模块各自分别对应一个第一消息队列,对于每个并行检查模块,该并行检查模块会对推送消息进行检查,若检查通过,会基于消息中间件将检查通过指示信息发送给该并行检查模块对应的第一消息队列。
在一些实施例中,所述步骤s14包括步骤s141(未示出)。在步骤s141中,网络设备通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息开始计时,若在预定的时间范围内从所述第一消息队列获取到除该并行检查模块以外的其他全部并行检查模块分别发送的包括所述推送消息的检查通过指示信息,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息。在一些实施例中,检查通过指示信息存在超时机制,从第一消息队列获取到一个并行检查模块发送的包括该推送消息的检查通过指示信息开始计时,若在预定的时间范围内(例如,5秒)从第一消息队列获取到了除该并行检查模块以外的其他全部并行检查模块分别发送的检查通过指示信息,则开始确定该推送消息对应的推送通道,否则若在预定的时间范围内没有从第一消息队列获取到除该并行检查模块以外的其他全部并行检查模块分别发送的检查通过指示信息,则视为超时,会丢弃当前已经接收到的一个或多个并行检查模块发送的包括该推送消息的检查通过指示信息,不会开始确定该推送消息对应的推送通道。在一些实施例中,可以是所有推送消息对应同一个预定时间范围,或者,还可以不同类型的推送消息对应不同的预定时间范围,或者,不同重要程度不同权重的推送消息对应不同的预定时间范围。
在一些实施例中,所述通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,包括:通过推送通道选择模块从所述第一消息队列获取到一个包括所述推送消息的检查通过指示信息,根据该检查通过指示信息中的模块标识信息,确定发送该检查通过指示信息的并行检查模块。在一些实施例中,若检查通过指示信息中包括模块标识信息,则将该模块标识信息所标识的并行检查模块确定为发送该检查通过指示信息的并行检查模块。
在一些实施例中,所述第一消息队列为多个,所述通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,包括:通过推送通道选择模块从多个第一消息队列中的一个第一消息队列获取到一个包括所述推送消息的检查通过指示信息,将该第一消息队列对应的并行检查模块作为发送该检查通过指示信息的并行检查模块。在一些实施例中,存在多个第一消息队列,每个并行检查模块各自分别对应一个第一消息队列,若推送通道选择模块从多个第一消息队列中的一个第一消息队列获取到检查通过指示信息,则将该第一消息队列所对应的并行检查模块确定为发送该检查通过指示信息的并行检查模块。
在一些实施例中,所述步骤s141包括:网络设备通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,判断所述推送通道选择模块中当前是否存在对应所述推送消息的至少一个待合并检查通过指示信息,若否,将该检查通过指示信息确定为一个待合并检查通过指示信息,并将当前时间作为所述推送消息对应的初始时间,若是,将该检查通过指示信息确定为另一个待合并检查通过指示信息,并检测所述推送通道选择模块中当前存在的对应所述推送消息的一个或多个待合并检查通过指示信息的数量是否与所述多个并行检查模块的数量相同,若相同,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,并删除所述一个或多个待合并检查通过指示信息;其中,所述方法还包括:对于所述推送消息,从所述推送消息对应的初始时间开始计时,若达到预定的时间范围,删除所述推送通道选择模块中当前存在的对应所述推送消息的一个或多个待合并检查通过指示信息。在一些实施例中,推送通道选择模块从第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,判断当前是否存在对应所述推送消息的待合并检查通过指示信息,若否,将该检查通过指示信息确定为一个待合并检查通过指示信息,并将当前时间作为该推送消息对应的初始时间,若是,将该检查通过指示信息确定为另一个待合并检查通过指示信息,并检测当前存在的对应该推送消息的待合并检查通过指示信息的数量是否与并行检查模块的数量相同,若相同,开始确定该推送消息对应的推送通道,并删除当前存在的对应该推送消息的待合并检查通过指示信息。在一些实施例中,从该推送消息对应的初始时间开始计时,若达到预定时间范围,停止计时,并删除当前存在的对应该推送消息的待合并检查通过指示信息。
在一些实施例中,所述步骤s141包括:网络设备通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,判断所述推送通道选择模块中当前是否存在对应所述推送消息的待合并检查通过指示信息集合,若否,新建所述待合并检查通过指示信息集合,将该检查通过指示信息加入所述待合并检查通过指示信息集合,并将当前时间作为所述待合并检查通过指示信息集合对应的初始时间,若是,将该检查通过指示信息加入所述待合并检查通过指示信息集合,并检测所述待合并检查通过指示信息集合中的检查通过指示信息的数量是否与所述多个并行检查模块的数量相同,若相同,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,并删除所述待合并检查通过指示信息集合;其中,所述方法还包括:对于所述待合并检查通过指示信息集合,从所述待合并检查通过指示信息集合对应的初始时间开始计时,若达到预定的时间范围,删除所述待合并检查通过指示信息集合。在一些实施例中,推送通道选择模块从第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,判断当前是否存在对应所述推送消息的待合并检查通过指示信息集合,若否,新建该推送消息对应的待合并检查通过指示信息集合,并将该检查通过指示信息加入该待合并检查通过指示信息集合,并将当前时间作为该待合并检查通过指示信息集合对应的初始时间,若是,将该检查通过指示信息加入该待合并检查通过指示信息集合,并检测该待合并检查通过指示信息集合中的检查通过指示信息的数量是否与并行检查模块的数量相同,若相同,开始确定该推送消息对应的推送通道,并删除该待合并检查通过指示信息集合。在一些实施例中,从该待合并检查通过指示信息集合对应的初始时间开始计时,若达到预定时间范围,停止计时,并删除该待合并检查通过指示信息集合。
在一些实施例中,其中,所述基于消息中间件向第一消息队列发送检查通过指示信息,还包括:若发送失败,判断所述检查通过指示信息对应的失败重试次数是否达到预定的次数阈值,若是,丢弃所述检查通过指示信息,若否,基于所述消息中间件重新尝试向所述第一消息队列发送所述检查通过指示信息,并将所述失败重试次数加一。在一些实施例中,在向第一消息队列发送检查通过指示信息的时候,若发送失败,会判断该推送消息对应的失败重试次数是否达到预定的次数阈值,若是,丢弃该检查通过指示信息,不再重新尝试向第一消息队列发送该检查通过指示信息,该推送消息会被视为推送失败,否则,重新尝试向第一消息队列发送该检查通过指示信息,并将该失败重试次数加一。在一些实施例中,在每次发送失败之后,会生成发送失败指示信息并返回给推送消息发送方的用户设备,由推送消息发送方来确认是否重试。在一些实施例中,在该推送消息对应的失败重试次数达到预定的次数阈值后,会生成发送失败指示信息并返回给推送消息发送方的用户设备,由推送消息发送方来确认是否重试并重置该推送消息对应的失败重试次数。
在一些实施例中,其中,所述基于所述消息中间件向第二消息队列发送推送指示信息,还包括:若发送失败,判断所述推送指示信息对应的失败重试次数是否达到预定的次数阈值,若是,丢弃所述推送指示信息,若否,基于所述消息中间件重新尝试向所述第二消息队列发送所述推送指示信息,并将所述失败重试次数加一。在一些实施例中,在向第二消息队列发送推送指示信息的时候,若发送失败,会判断该推送消息对应的失败重试次数是否达到预定的次数阈值,若是,丢弃该推送指示信息,不再重新尝试向第二消息队列发送该推送指示信息,该推送消息会被视为推送失败,否则,重新尝试向第二消息队列发送该推送指示信息,并将该失败重试次数加一。在一些实施例中,在每次发送失败之后,会生成发送失败指示信息并返回给推送消息发送方的用户设备,由推送消息发送方来确认是否重试。在一些实施例中,在该推送消息对应的失败重试次数达到预定的次数阈值后,会生成发送失败指示信息并返回给推送消息发送方的用户设备,由推送消息发送方来确认是否重试并重置该推送消息对应的失败重试次数。
在一些实施例中,所述方法还包括:网络设备根据推送需求信息,调节所述网络设备对应的配置参数。在一些实施例中,配置参数可以是网络设备系统中的ulimit参数。在一些实施例中,所述推送需求信息包括任何与推动需求相关的信息,如推送消息的吞吐量需求、推送消息的推送速度需求等,网络设备通过调节其对应的配置参数,来实现所期望的推送性能。作为一个示例,对网络设备系统中的ulimit参数进行如下调节:
corefilesize(blocks,-c)unlimited
datasegsize(kbytes,-d)unlimited
schedulingpriority(-e)0
filesize(blocks,-f)unlimited
pendingsignals(-i)256041
maxlockedmemory(kbytes,-l)64
maxmemorysize(kbytes,-m)unlimited
openfiles(-n)10000000
pipesize(512bytes,-p)8
posixmessagequeues(bytes,-q)819200
real-timepriority(-r)0
stacksize(kbytes,-s)8192
cputime(seconds,-t)unlimited
maxuserprocesses(-u)unlimited
virtualmemory(kbytes,-v)unlimited
filelocks(-x)unlimited
在一些实施例中,所述方法还包括:网络设备实时记录所述鉴权模块、所述每个并行检查模块、所述推送通道选择模块以及所述推送通道发送模块的执行状态信息。在一些实施例中,执行状态信息包括但不限于执行前的初始状态信息,执行中的过程状态信息及执行后的结果状态信息。在一些实施例中,将实时记录的执行状态信息通过kafka(一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统,具体可以参考“https://kafka.apachecn.org/intro.html”)通道及数据传输脚本进行收集,然后经汇总入库到数据仓库,并按照需求形成报表。
在一些实施例中,所述方法还包括:网络设备将所述鉴权模块、所述每个并行检查模块、所述推送通道选择模块以及所述推送通道发送模块在执行过程中产生的状态标志位和/或临时变量写入所述网络设备的内存;其中,所述方法还包括:在所述鉴权模块、所述每个并行检查模块、所述推送通道选择模块以及所述推送通道发送模块的执行过程中,从所述网络设备的内存读取所述状态标志位和/或所述临时变量。在一些实施例中,直接在网络设备的内存中读写推送系统中的各个功能模块在执行过程中产生的、所需的各个状态标志位和/或临时变量。
图2示出根据本申请一个实施例的一种推送消息的网络设备结构图,该设备包括一一模块11、一二模块12、一三模块13、一四模块14和一五模块15。一一模块11,用于接收用户设备发送的推送消息发送请求,其中,所述推送消息发送请求包括推送消息及所述用户设备对应的第一标识信息,所述推送消息包括推送消息内容及推送用户对应的第二标识信息;一二模块12,用于将所述第一标识信息提供给鉴权模块,通过所述鉴权模块对所述第一标识信息进行验证,若验证通过,基于远程过程调用方式通过多个并行检查模块各自提供的第一远程调用接口将所述推送消息分别提供给所述多个并行检查模块;一三模块13,用于对于所述多个并行检查模块中的每个并行检查模块,通过该并行检查模块对所述推送消息进行检查,若检查通过,基于消息中间件向第一消息队列发送检查通过指示信息,其中,所述检查通过指示信息包括所述推送消息;一四模块14,用于若通过推送通道选择模块从所述第一消息队列获取到的包括所述推送消息的检查通过指示信息的数量等于所述多个并行检查模块的数量,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息;一五模块15,用于通过推送通道发送模块从所述第二消息队列获取所述推送指示信息,根据所述第三标识信息,将所述推送消息内容通过所述第三标识信息对应的推送通道推送给所述第二标识信息对应的用户设备。
一一模块11,用于接收用户设备发送的推送消息发送请求,其中,所述推送消息发送请求包括推送消息及所述用户设备对应的第一标识信息,所述推送消息包括推送消息内容及推送用户对应的第二标识信息。在一些实施例中,消息推送系统可以运行在一个网络设备上,或者,也可以运行在多个网络设备上。在一些实施例中,第一标识信息可以是推送消息发送方的用户设备的设备标识信息,或者,也可以是推送消息发送方的用户标识信息。在一些实施例中,网络设备通过某个推送通道将推送消息内容推送给第二标识信息所标识的推送消息接收方的用户设备,并在该用户设备的消息通知栏或该推送消息内容对应的目标应用呈现该推送消息内容。在一些实施例中,推送用户是接收推送消息内容的用户,即推送消息接收方。在一些实施例中,第二标识信息可以是推送用户的标识信息,或者,也可以是推送用户所使用的用户设备的标识信息。在一些实施例中,第二标识信息可以用于标识该推送消息内容对应的目标应用中的单个用户,或者,也可以用于标识该目标应用中的多个用户,或者,还可以用于标识该目标应用中的所有用户。
一二模块12,用于将所述第一标识信息提供给鉴权模块,通过所述鉴权模块对所述第一标识信息进行验证,若验证通过,基于远程过程调用方式通过多个并行检查模块各自提供的第一远程调用接口将所述推送消息分别提供给所述多个并行检查模块。在一些实施例中,鉴权模块是网络设备中的一个独立模块,用于对用户设备或使用该用户设备发送推送消息发送请求的推送消息发送方是否具有推送消息的权限进行验证,可以是验证是否具有推送权限,或者,也可以是验证在当前时间是否具有推送权限,或者,还可以是验证对于该推送消息是否具有推送权限。在一些实施例中,若验证未通过,会生成鉴权失败指示信息并返回给网络设备,并通过网络设备返回给用户设备进行呈现。在一些实施例中,远程过程调用(rpc,remoteprocedurecall)是指计算机a上的进程,调用计算机a上的另外一个进程或者调用另外一台计算机b上的一个进程,其中a上的调用进程被挂起,而b上的被调用进程开始执行,当值返回给a时,a进程继续执行,调用方可以通过被调用方提供的接口将传入参数传送给被调用方,被调用方在对该参数信息进行处理后可以将处理结果作为返回参数传回给调用方。在一些实施例中,该多个并行检查模块互相之间是并行运行的,该多个并行检查模块可以与鉴权模块位于同一个网络设备中,或者,也可以分别位于两个不同的网络设备中,或者,该多个并行检查模块互相之间也可以分别位于不同的网络设备中。在一些实施例中,多个并行检查模块用于对推送消息进行检查,该多个并行检查模块可以基于远程过程调用方式各自分别提供第一远程调用接口。在一些实施例中,鉴权模块在验证通过后,会将验证通过的验证结果信息返回给网络设备,然后网络设备可以基于远程过程调用方式通过第一远程调用接口将推送消息分别提供给该多个并行检查模块。在一些实施例中,鉴权模块在验证通过后,可以直接基于远程过程调用方式通过第一远程调用接口将推送消息分别提供给该多个并行检查模块。
一三模块13,用于对于所述多个并行检查模块中的每个并行检查模块,通过该并行检查模块对所述推送消息进行检查,若检查通过,基于消息中间件向第一消息队列发送检查通过指示信息,其中,所述检查通过指示信息包括所述推送消息。在一些实施例中,每个并行检查模块会对推送消息进行检查,若检查通过,会生成包括该推送消息的检查通过指示信息,并发送给第一消息队列。在一些实施例中,消息队列(mq,messagequeue)是基础数据结构中“先进先出”的一种数据机构,指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递,生产者产生消息并把消息放入队列,然后由消费者去处理,消费者可以从队列中拉取消息,或者,消费者还可以订阅该队列由该队列来给其主动推送消息。在一些实施例中,可以只有一个第一消息队列,各个并行检查模块在检查通过后均会将推送消息发送给该第一消息队列。在一些实施例中,可以有多个第一消息队列,每个并行检查模块各自对应一个不同的第一消息队列,每个并行检查模块在检查通过后会将推送消息发送给该并行检查模块对应的第一消息队列。在一些实施例中,消息中间件作为第一消息队列的运行载体,通过高效可靠的消息传递机制来管理、支撑、维护第一消息队列的数据通信。
一四模块14,用于若通过推送通道选择模块从所述第一消息队列获取到的包括所述推送消息的检查通过指示信息的数量等于所述多个并行检查模块的数量,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息。在一些实施例中,通道选择模块可以直接从第一消息队列中拉取检查通过指示信息,或者,还可以订阅第一消息队列由第一消息队列来给其主动推送检查通过指示信息。在一些实施例中,只有在从第一消息队列中获取到的包括该推送消息的检查通过指示信息的数量等于该多个并行检查模块的数量的情况下,推送通道选择模块才会开始确定该推送消息对应的推送通道。例如,存在3个并行检查模块,每个并行检查模块会对推送消息进行检查并在检查通过后将对应的检查通过指示信息发送给第一消息队列,通道选择模块只有在已经获取到该3个并行检查模块分别发送的包含该推送消息的检查通过指示信息后,才会开始确定该推送消息对应的推送通道。在一些实施例中,推送通道选择模块可以与该多个并行检查模块位于同一个网络设备中,或者,消息中间件包括对应的消息服务器或消息队列服务器,此时,推送通道选择模块可以与该多个并行检查模块分别位于不同的网络设备中。在一些实施例中,推送通道包括目标应用自有通道和厂商通道,自有通道需要目标应用自己建立和维护与目标应用对应的后台推送服务器之间的连接,只有当目标应用存活在用户设备的内存中且目标应用与目标应用对应的后台推送服务器之间的连接为活跃状态时,目标应用对应的后台推送服务器才可以通过自有通道将推送消息内容推送给用户设备,厂商通道是各个用户设备品牌在用户设备系统中建立的每个用户设备与该用户设备品牌对应的后台推送服务器之间的连接,目标应用对应的后台推送服务器可以通过接入各种厂商通道来将推送消息内容推送给用户设备。在一些实施例中,不同的推送用户对应不同的默认推送通道(目标应用自有通道或厂商通道),推送通道选择模块会检查推送用户是否具有默认推送通道的发送权限,若具有,则会选择该默认推送通道进行消息推送,否则,则会选择除该默认推送通道以外的其他推送通道进行消息推送。在一些实施例中,会先通过默认推送通道进行消息推送,在默认推送通道推送失败后,会通过除默认推送通道以外的其他推送通道进行消息推送。在一些实施例中,默认推送通道为厂商通道,会首先检查目标应用对应的后台推送服务器是否接入了该厂商通道,若接入,则会优先通过该厂商通道进行消息推送,在厂商通道推送失败的情况下,会通过自有通道来推送消息。在一些实施例中,不同的推送通道有不同的限制条件,比如推送标题内容,推送内容长度,每日推送条数限制等,推送通道选择模块需要根据推送消息来确定适合该推送消息的推送通道。在一些实施例中,推送通道选择模块在确定完推送消息对应的推送通道后,会生成包括该推送消息与用于标识该推送通道的第三标识信息的推送指示信息,并发送给第二消息队列。
一五模块15,用于通过推送通道发送模块从所述第二消息队列获取所述推送指示信息,根据所述第三标识信息,将所述推送消息内容通过所述第三标识信息对应的推送通道推送给所述第二标识信息对应的用户设备。在一些实施例中,推送通道发送模块可以与推送通道选择模块位于同一个网络设备中,或者,推送通道发送模块还可以与推送通道选择模块分别位于不同的网络设备中。在一些实施例中,推送通道发送模块从第二消息队列获取包括该推送消息与用于标识该推送通道的第三标识信息的推送指示信息,根据推送消息中包括的用于标识推送用户的第二标识信息,将推送消息中包括的推送消息内容通过第三标识信息所标识的推送通道推送给第二标识信息所标识的用户设备。在一些实施例中,若推送通道为目标应用自有通道,则推送通道发送模块可以直接将该推送消息内容推送给用户设备,若推送通道为厂商通道,则推送通道发送模块需要先将该推送消息内容发送给该用户设备品牌对应的后台推送服务器,然后该后台推送服务器再通过其对应的厂商通道将该推送消息内容推送给用户设备。在一些实施例中,推送通道发送模块还会将推送消息内容转换成推送通道所支持的消息格式。在一些实施例中,推送通道发送模块在通过推送通道给用户设备推送完推送消息内容后,会监听该用户设备异步返回的推送结果信息或推送反馈信息。
本申请中的消息推送系统通过多个并行检查模块实现了推送消息检查过程的并行处理,并将鉴权模块、多个并行检查模块、推送通道选择模块以及推送通道选择模块通过远程过程调用方式及消息队列方式连接起来,从而可以使得消息推送系统中的各个功能模块互相之间解耦,并且能够提高消息推送中间件的性能,解决现有技术中存在的中间件性能瓶颈问题,能够有效地提高推送消息的吞吐量及消息推送速度,提高消息推送的效率及稳定性。
在一些实施例中,所述多个并行检查模块包括频控模块、去重模块及敏感词模块,所述频控模块用于对所述推送消息进行频控检查,所述去重模块用于对所述推送消息进行去重检查,所述敏感词模块用于对所述推送消息进行敏感词检查。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述远程过程调用方式采用grpc。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述一三模块13用于:若对于该并行检查模块的检查未通过,网络设备生成推送失败指示信息;将所述推送失败指示信息通过所述远程过程调用方式提供给网络设备,以通过所述网络设备将所述推送失败指示信息返回给所述用户设备。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述将所述推送失败指示信息通过所述远程过程调用方式提供给网络设备,包括:将所述推送失败指示信息作为所述第一远程调用接口的返回结果同步提供给所述网络设备。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述将所述推送失败指示信息通过所述远程过程调用方式提供给网络设备,包括:基于所述远程过程调用方式将所述推送消息通过所述网络设备提供的第二远程调用接口异步提供给所述网络设备。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述消息中间件为rabbitmq。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述检查通过指示信息包括并行检查模块对应的模块标识信息。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述第一消息队列为多个,每个并行检查模块分别对应一个第一消息队列;其中,所述若检查通过,基于消息中间件将检查通过指示信息发送给第一消息队列,包括:若检查通过,基于消息中间件将检查通过指示信息发送给该并行检查模块对应的第一消息队列。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述一四模块14包括一四一模块141(未示出)。一四一模块141,用于通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息开始计时,若在预定的时间范围内从所述第一消息队列获取到除该并行检查模块以外的其他全部并行检查模块分别发送的包括所述推送消息的检查通过指示信息,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,包括:通过推送通道选择模块从所述第一消息队列获取到一个包括所述推送消息的检查通过指示信息,根据该检查通过指示信息中的模块标识信息,确定发送该检查通过指示信息的并行检查模块。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述第一消息队列为多个,所述通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,包括:通过推送通道选择模块从多个第一消息队列中的一个第一消息队列获取到一个包括所述推送消息的检查通过指示信息,将该第一消息队列对应的并行检查模块作为发送该检查通过指示信息的并行检查模块。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述一四一模块141用于:通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,判断所述推送通道选择模块中当前是否存在对应所述推送消息的至少一个待合并检查通过指示信息,若否,将该检查通过指示信息确定为一个待合并检查通过指示信息,并将当前时间作为所述推送消息对应的初始时间,若是,将该检查通过指示信息确定为另一个待合并检查通过指示信息,并检测所述推送通道选择模块中当前存在的对应所述推送消息的一个或多个待合并检查通过指示信息的数量是否与所述多个并行检查模块的数量相同,若相同,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,并删除所述一个或多个待合并检查通过指示信息;其中,所述设备还用于:对于所述推送消息,从所述推送消息对应的初始时间开始计时,若达到预定的时间范围,删除所述推送通道选择模块中当前存在的对应所述推送消息的一个或多个待合并检查通过指示信息。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述一四一模块141用于:通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,判断所述推送通道选择模块中当前是否存在对应所述推送消息的待合并检查通过指示信息集合,若否,新建所述待合并检查通过指示信息集合,将该检查通过指示信息加入所述待合并检查通过指示信息集合,并将当前时间作为所述待合并检查通过指示信息集合对应的初始时间,若是,将该检查通过指示信息加入所述待合并检查通过指示信息集合,并检测所述待合并检查通过指示信息集合中的检查通过指示信息的数量是否与所述多个并行检查模块的数量相同,若相同,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,并删除所述待合并检查通过指示信息集合;其中,所述设备还用于:对于所述待合并检查通过指示信息集合,从所述待合并检查通过指示信息集合对应的初始时间开始计时,若达到预定的时间范围,删除所述待合并检查通过指示信息集合。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,其中,所述基于消息中间件向第一消息队列发送检查通过指示信息,还包括:若发送失败,判断所述检查通过指示信息对应的失败重试次数是否达到预定的次数阈值,若是,丢弃所述检查通过指示信息,若否,基于所述消息中间件重新尝试向所述第一消息队列发送所述检查通过指示信息,并将所述失败重试次数加一。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,其中,所述基于所述消息中间件向第二消息队列发送推送指示信息,还包括:若发送失败,判断所述推送指示信息对应的失败重试次数是否达到预定的次数阈值,若是,丢弃所述推送指示信息,若否,基于所述消息中间件重新尝试向所述第二消息队列发送所述推送指示信息,并将所述失败重试次数加一。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述设备还用于:根据推送需求信息,调节所述网络设备对应的配置参数。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述设备还用于:实时记录所述鉴权模块、所述每个并行检查模块、所述推送通道选择模块以及所述推送通道发送模块的执行状态信息。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述设备还用于:将所述鉴权模块、所述每个并行检查模块、所述推送通道选择模块以及所述推送通道发送模块在执行过程中产生的状态标志位和/或临时变量写入所述网络设备的内存;其中,所述方法还包括:在所述鉴权模块、所述每个并行检查模块、所述推送通道选择模块以及所述推送通道发送模块的执行过程中,从所述网络设备的内存读取所述状态标志位和/或所述临时变量。在此,相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
图3示出了可被用于实施本申请中所述的各个实施例的示例性系统。
如图3所示在一些实施例中,系统300能够作为各所述实施例中的任意一个设备。在一些实施例中,系统300可包括具有指令的一个或多个计算机可读介质(例如,系统存储器或nvm/存储设备320)以及与该一个或多个计算机可读介质耦合并被配置为执行指令以实现模块从而执行本申请中所述的动作的一个或多个处理器(例如,(一个或多个)处理器305)。
对于一个实施例,系统控制模块310可包括任意适当的接口控制器,以向(一个或多个)处理器305中的至少一个和/或与系统控制模块310通信的任意适当的设备或组件提供任意适当的接口。
系统控制模块310可包括存储器控制器模块330,以向系统存储器315提供接口。存储器控制器模块330可以是硬件模块、软件模块和/或固件模块。
系统存储器315可被用于例如为系统300加载和存储数据和/或指令。对于一个实施例,系统存储器315可包括任意适当的易失性存储器,例如,适当的dram。在一些实施例中,系统存储器315可包括双倍数据速率类型四同步动态随机存取存储器(ddr4sdram)。
对于一个实施例,系统控制模块310可包括一个或多个输入/输出(i/o)控制器,以向nvm/存储设备320及(一个或多个)通信接口325提供接口。
例如,nvm/存储设备320可被用于存储数据和/或指令。nvm/存储设备320可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(hdd)、一个或多个光盘(cd)驱动器和/或一个或多个数字通用光盘(dvd)驱动器)。
nvm/存储设备320可包括在物理上作为系统300被安装在其上的设备的一部分的存储资源,或者其可被该设备访问而不必作为该设备的一部分。例如,nvm/存储设备320可通过网络经由(一个或多个)通信接口325进行访问。
(一个或多个)通信接口325可为系统300提供接口以通过一个或多个网络和/或与任意其他适当的设备通信。系统300可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信。
对于一个实施例,(一个或多个)处理器305中的至少一个可与系统控制模块310的一个或多个控制器(例你如,存储器控制器模块330)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器305中的至少一个可与系统控制模块310的一个或多个控制器的逻辑封装在一起以形成系统级封装(sip)。对于一个实施例,(一个或多个)处理器305中的至少一个可与系统控制模块310的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器305中的至少一个可与系统控制模块310的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(soc)。
在各个实施例中,系统300可以但不限于是:服务器、工作站、台式计算设备或移动计算设备(例如,膝上型计算设备、持有计算设备、平板电脑、上网本等)。在各个实施例中,系统300可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,系统300包括一个或多个摄像机、键盘、液晶显示器(lcd)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(asic)和扬声器。
本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,如前任一项所述的方法被执行。
本申请还提供了一种计算机程序产品,当所述计算机程序产品被计算机设备执行时,如前任一项所述的方法被执行。
本申请还提供了一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个计算机程序;
当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如前任一项所述的方法。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。本领域技术人员应能理解,计算机程序指令在计算机可读介质中的存在形式包括但不限于源文件、可执行文件、安装包文件等,相应地,计算机程序指令被计算机执行的方式包括但不限于:该计算机直接执行该指令,或者该计算机编译该指令后再执行对应的编译后程序,或者该计算机读取并执行该指令,或者该计算机读取并安装该指令后再执行对应的安装后程序。在此,计算机可读介质可以是可供计算机访问的任意可用的计算机可读存储介质或通信介质。
通信介质包括藉此包含例如计算机可读指令、数据结构、程序模块或其他数据的通信信号被从一个系统传送到另一系统的介质。通信介质可包括有导的传输介质(诸如电缆和线(例如,光纤、同轴等))和能传播能量波的无线(未有导的传输)介质,诸如声音、电磁、rf、微波和红外。计算机可读指令、数据结构、程序模块或其他数据可被体现为例如无线介质(诸如载波或诸如被体现为扩展频谱技术的一部分的类似机制)中的已调制数据信号。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被更改或设定的信号。调制可以是模拟的、数字的或混合调制技术。
作为示例而非限制,计算机可读存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动的介质。例如,计算机可读存储介质包括,但不限于,易失性存储器,诸如随机存储器(ram,dram,sram);以及非易失性存储器,诸如闪存、各种只读存储器(rom,prom,eprom,eeprom)、磁性和铁磁/铁电存储器(mram,feram);以及磁性和光学存储设备(硬盘、磁带、cd、dvd);或其它现在已知的介质或今后开发的能够存储供计算机系统使用的计算机可读信息/数据。
在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
1.一种推送消息的方法,应用于网络设备端,其中,所述方法包括:
接收用户设备发送的推送消息发送请求,其中,所述推送消息发送请求包括推送消息及所述用户设备对应的第一标识信息,所述推送消息包括推送消息内容及推送用户对应的第二标识信息;
将所述第一标识信息提供给鉴权模块,通过所述鉴权模块对所述第一标识信息进行验证,若验证通过,基于远程过程调用方式通过多个并行检查模块各自提供的第一远程调用接口将所述推送消息分别提供给所述多个并行检查模块;
对于所述多个并行检查模块中的每个并行检查模块,通过该并行检查模块对所述推送消息进行检查,若检查通过,基于消息中间件向第一消息队列发送检查通过指示信息,其中,所述检查通过指示信息包括所述推送消息;
若通过推送通道选择模块从所述第一消息队列获取到的包括所述推送消息的检查通过指示信息的数量等于所述多个并行检查模块的数量,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息;
通过推送通道发送模块从所述第二消息队列获取所述推送指示信息,根据所述第三标识信息,将所述推送消息内容通过所述第三标识信息对应的推送通道推送给所述第二标识信息对应的用户设备。
2.根据权利要求1所述的方法,其中,所述多个并行检查模块包括频控模块、去重模块及敏感词模块,所述频控模块用于对所述推送消息进行频控检查,所述去重模块用于对所述推送消息进行去重检查,所述敏感词模块用于对所述推送消息进行敏感词检查。
3.根据权利要求1所述的方法,其中,所述远程过程调用方式采用grpc。
4.根据权利要求1所述的方法,其中,所述对于所述多个并行检查模块中的每个并行检查模块,通过该并行检查模块对所述推送消息进行检查,若检查通过,基于消息中间件向第一消息队列发送检查通过指示信息,还包括:
若对于该并行检查模块的检查未通过,生成推送失败指示信息;
将所述推送失败指示信息通过所述远程过程调用方式提供给网络设备,以通过所述网络设备将所述推送失败指示信息返回给所述用户设备。
5.根据权利要求4所述的方式,其中,所述将所述推送失败指示信息通过所述远程过程调用方式提供给网络设备,包括:
将所述推送失败指示信息作为所述第一远程调用接口的返回结果同步提供给所述网络设备。
6.根据权利要求4所述的方法,其中,所述将所述推送失败指示信息通过所述远程过程调用方式提供给网络设备,包括:
基于所述远程过程调用方式将所述推送消息通过所述网络设备提供的第二远程调用接口异步提供给所述网络设备。
7.根据权利要求1所述的方法,其中,所述消息中间件为rabbitmq。
8.根据权利要求1所述的方法,其中,所述检查通过指示信息包括并行检查模块对应的模块标识信息。
9.根据权利要求1所述的方法,其中,所述第一消息队列为多个,每个并行检查模块分别对应一个第一消息队列;
其中,所述若检查通过,基于消息中间件将检查通过指示信息发送给第一消息队列,包括:
若检查通过,基于消息中间件将检查通过指示信息发送给该并行检查模块对应的第一消息队列。
10.根据权利要求1所述的方法,其中,所述若通过推送通道选择模块从所述第一消息队列获取到的包括所述推送消息的检查通过指示信息的数量等于所述多个并行检查模块的数量,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,包括:
通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息开始计时,若在预定的时间范围内从所述第一消息队列获取到除该并行检查模块以外的其他全部并行检查模块分别发送的包括所述推送消息的检查通过指示信息,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,其中,所述推送指示信息包括所述推送消息及所述推送通道对应的第三标识信息。
11.根据权利要求10所述的方法,其中,所述通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,包括:
通过推送通道选择模块从所述第一消息队列获取到一个包括所述推送消息的检查通过指示信息,根据该检查通过指示信息中的模块标识信息,确定发送该检查通过指示信息的并行检查模块。
12.根据权利要求10所述的方法,其中,所述第一消息队列为多个,所述通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,包括:
通过推送通道选择模块从多个第一消息队列中的一个第一消息队列获取到一个包括所述推送消息的检查通过指示信息,将该第一消息队列对应的并行检查模块作为发送该检查通过指示信息的并行检查模块。
13.根据权利要求10所述的方法,其中,所述通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息开始计时,若在预定的时间范围内从所述第一消息队列获取到除该并行检查模块以外的其他全部并行检查模块分别发送的包括所述推送消息的检查通过指示信息,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,包括:
通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,判断所述推送通道选择模块中当前是否存在对应所述推送消息的至少一个待合并检查通过指示信息,若否,将该检查通过指示信息确定为一个待合并检查通过指示信息,并将当前时间作为所述推送消息对应的初始时间,若是,将该检查通过指示信息确定为另一个待合并检查通过指示信息,并检测所述推送通道选择模块中当前存在的对应所述推送消息的一个或多个待合并检查通过指示信息的数量是否与所述多个并行检查模块的数量相同,若相同,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,并删除所述一个或多个待合并检查通过指示信息;
其中,所述方法还包括:
对于所述推送消息,从所述推送消息对应的初始时间开始计时,若达到预定的时间范围,删除所述推送通道选择模块中当前存在的对应所述推送消息的一个或多个待合并检查通过指示信息。
14.根据权利要求10所述的方法,其中,所述通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息开始计时,若在预定的时间范围内从所述第一消息队列获取到除该并行检查模块以外的其他全部并行检查模块分别发送的包括所述推送消息的检查通过指示信息,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,包括:
通过推送通道选择模块从所述第一消息队列获取到一个并行检查模块发送的包括所述推送消息的检查通过指示信息,判断所述推送通道选择模块中当前是否存在对应所述推送消息的待合并检查通过指示信息集合,若否,新建所述待合并检查通过指示信息集合,将该检查通过指示信息加入所述待合并检查通过指示信息集合,并将当前时间作为所述待合并检查通过指示信息集合对应的初始时间,若是,将该检查通过指示信息加入所述待合并检查通过指示信息集合,并检测所述待合并检查通过指示信息集合中的检查通过指示信息的数量是否与所述多个并行检查模块的数量相同,若相同,通过所述推送通道选择模块确定所述推送消息对应的推送通道,并基于所述消息中间件向第二消息队列发送推送指示信息,并删除所述待合并检查通过指示信息集合;
其中,所述方法还包括:
对于所述待合并检查通过指示信息集合,从所述待合并检查通过指示信息集合对应的初始时间开始计时,若达到预定的时间范围,删除所述待合并检查通过指示信息集合。
15.根据权利要求1所述的方法,其中,所述基于消息中间件向第一消息队列发送检查通过指示信息,或者,所述基于所述消息中间件向第二消息队列发送推送指示信息,还包括:
若发送失败,判断所述检查通过指示信息或所述推送指示信息对应的失败重试次数是否达到预定的次数阈值,若是,丢弃所述检查通过指示信息或所述推送指示信息,若否,基于所述消息中间件重新尝试向所述第一消息队列发送所述检查通过指示信息或向所述第二消息队列发送所述推送指示信息,并将所述失败重试次数加一。
16.根据权利要求1所述的方法,其中,所述方法还包括:
根据推送需求信息,调节所述网络设备对应的配置参数。
17.根据权利要求1所述的方法,其中,所述方法还包括:
实时记录所述鉴权模块、所述每个并行检查模块、所述推送通道选择模块以及所述推送通道发送模块的执行状态信息。
18.根据权利要求1所述的方法,其中,所述方法还包括:
将所述鉴权模块、所述每个并行检查模块、所述推送通道选择模块以及所述推送通道发送模块在执行过程中产生的状态标志位和/或临时变量写入所述网络设备的内存;
其中,所述方法还包括:
在所述鉴权模块、所述每个并行检查模块、所述推送通道选择模块以及所述推送通道发送模块的执行过程中,从所述网络设备的内存读取所述状态标志位和/或所述临时变量。
19.一种推送消息的设备,其特征在于,所述设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如权利要求1至18中任一项所述的方法。
20.一种存储指令的计算机可读介质,所述指令在被计算机执行时使得所述计算机进行如权利要求1至18中任一项所述方法的操作。
21.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至18中任一项所述方法的步骤。
技术总结