发明内容
有鉴于此,本发明要解决的一个技术问题是提供一种短信下发方法和短信平台。
根据本发明的一个方面,提供一种短信下发方法,包括:短信平台建立其与运营商服务器端之间的短信通道,用于发送短信;所述短信平台设置与所述短信通道的发送速率相对应的缓存队列,用以缓存通过所述短信通道向运营商服务器端发送的短信;所述短信平台将所述缓存队列中的待发短信发送给运营商服务器端,并接收到运营商服务器端返回的对于发送短信的状态报告;所述短信平台基于所述状态报告确定短信发送状态,根据所述短信发送状态判断是否需要调整向所述运营商服务器端提交短信的速率,如果是,则调整所述缓存队列的长度,用以调整与此缓存队列相对应的所述短信通道的短信发送速率。
可选地,所述短信平台建立其与运营商服务器端之间的短信通道包括:所述短信平台与运营商服务器端提供的短信发送接口建立链路,通过建立的链路与运营商服务器端进行短信收发;其中,所述短信平台和一个运营商服务器端之间建立一条或多条链路;所述链路作为所述短信通道,并且所述链路是TCP长连接,在所述TCP长连接建立后通过TCP协议将所述缓存队列中的待发短信发送到运营商服务器端。
可选地,所述短信平台设置与所述短信通道相对应的缓存队列包括:所述短信平台为每一个短信通道都设置一个缓存队列,其中,所述缓存队列的长度为此缓存队列所对应的短信通道每秒发送短信数量的上限阈值;所述短信平台启动第一线程扫描所述缓存队列,当确定所述缓存队列中存在空余位置时,根据空余位置的数量从数据库获取待发送的短信放入所述缓存队列中;所述短信平台启动第二线程,用于从所述缓所述存队列中获取待发送的短信并通过所述短信通道发送至运营商服务器端。
可选地,所述短信平台从所述状态报告中提取状态报告码,基于所述状态报告码进行分类并获得短信的发送状态,所述发送状态包括:提交成功、提交失败、发送成功、发送失败;所述短信平台根据所述发送状态统计与运营商服务器端对应的发送短信的成功率;如果确定运营商服务器端发送短信的成功率低于预设的阈值,则对与此运营商服务器端对应的短信通道进行限速或降速处理,减少与此短信通道对应的所述缓存队列的长度,用于适配限速或降速后的所述短信通道的发送速率。
可选地,所述短信平台对所述缓存队列中的短信数据进行序列化处理;当确定出现系统异常时,所述短信平台将序列化的短信数据存储在本地硬盘中;在进行短信数据恢复时,所述短信平台从所述硬盘中获取所述序列化的短信数据并进行反序列化处理,将进行反序列化处理后的短信数据存储在所述缓存队列中。
根据本发明的另一方面,提供一种短信平台,包括:通道建立模块,用于建立其与运营商服务器端之间的短信通道,用于发送短信;缓存设立模块,用于设置与所述短信通道的发送速率相对应的缓存队列,用以缓存通过所述短信通道向运营商服务器端发送的短信;短信发送模块,用于将所述缓存队列中的待发短信发送给运营商服务器端,并接收到运营商服务器端返回的对于发送短信的状态报告;调整确定模块,用于基于所述状态报告确定短信发送状态,根据所述短信发送状态判断是否需要调整向所述运营商服务器端提交短信的速率;调整执行模块,用于如果需要调整向所述运营商服务器端提交短信的速率,则调整所述缓存队列的长度,用以调整与此缓存队列相对应的所述短信通道的短信发送速率。
可选地,所述通道建立模块,用于与运营商服务器端提供的短信发送接口建立链路,通过建立的链路与运营商服务器端进行短信收发;其中,所述短信平台和一个运营商服务器端之间建立一条或多条链路;所述链路作为所述短信通道,并且所述链路是TCP长连接;所述短信发送模块,用于在所述TCP长连接建立后通过TCP协议将所述缓存队列中的待发短信发送到运营商服务器端。
可选地,所述缓存设立模块,用于为每一个短信通道都设置一个缓存队列,其中,所述缓存队列的长度为此缓存队列所对应的短信通道每秒发送短信数量的上限阈值;所述短信发送模块,用于启动第一线程扫描所述缓存队列,当确定所述缓存队列中存在空余位置时,根据空余位置的数量从数据库获取待发送的短信放入所述缓存队列中;启动第二线程,用于从所述缓所述存队列中获取待发送的短信并通过所述短信通道发送至运营商服务器端。
可选地,所述调整确定模块,用于从所述状态报告中提取状态报告码,基于所述状态报告码进行分类并获得短信的发送状态,所述发送状态包括:提交成功、提交失败、发送成功、发送失败;根据所述发送状态统计与运营商服务器端对应的发送短信的成功率;所述调整执行模块,用于如果确定运营商服务器端发送短信的成功率低于预设的阈值,则对与此运营商服务器端对应的短信通道进行限速或降速处理,减少与此短信通道对应的所述缓存队列的长度,用于适配限速或降速后的所述短信通道的发送速率。
可选地,数据保障模块,用于对所述缓存队列中的短信数据进行序列化处理;当确定出现系统异常时,将序列化的短信数据存储在本地硬盘中;在进行短信数据恢复时,从所述硬盘中获取所述序列化的短信数据并进行反序列化处理,将进行反序列化处理后的短信数据存储在所述缓存队列中。
本发明的短信下发方法和短信平台,短信平台建立其与运营商服务器端之间的短信通道,设置与短信通道相对应的缓存队列,将缓存队列中的待发短信发送给运营商服务器端,并接收到运营商服务器端返回的状态报告;短信平台基于状态报告确定短信发送状态,根据短信发送状态调整缓存队列的长度,用以调整短信通道的短信发送速率;业务处理速度快,能够减少服务器压力,不需要频繁访问数据库,有效提升短信转发速度,使得运营商通道的利用率可以最大化,使用内存队列进行数据的预处理,可以适应短信这个业务的高速度和高性能的要求,可以适时调整缓存空间大小,以达到适配通道发送速率的效果,并可以对短信数据进行容灾备份处理,并能够增强客户的体验度。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本发明实施例可以应用于计算机系统/服务器,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器一起使用的众所周知的计算系统、环境和/或配置的例子包括但不限于:智能手机、个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
计算机系统/服务器可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
下文中的“第一”、“第二”等,仅用于描述上相区别,并没有其它特殊的含义。
图1为根据本发明的短信下发方法的一个实施例的流程示意图,如图1所示:
步骤101,短信平台建立其与运营商服务器端之间的短信通道,用于发送短信。运营商服务器端的服务器包括短信网关服务器等。
步骤102,短信平台设置与短信通道的发送速率相对应的缓存队列,用以缓存通过短信通道向运营商服务器端发送的短信。
步骤103,短信平台将缓存队列中的待发短信发送给运营商服务器端,并接收到运营商服务器端返回的对于发送短信的状态报告。
步骤104,短信平台基于状态报告确定短信发送状态,根据短信发送状态判断是否需要调整向运营商服务器端提交短信的速率,如果是,则调整缓存队列的长度,用以调整与此缓存队列相对应的短信通道的短信发送速率。
运营商服务器端包括短信网关等,如果不考虑运营商设定的发送速率上限,短信网关的处理速度是影响短信发送的及时性和到达率的关键因素。短信平台与运营商服务器端的短信网关提供的短信发送接口建立链路,通过建立的链路与运营商服务器端的短信网关进行短信收发。短信平台和一个运营商服务器端之间建立一条或多条链路,链路作为短信通道,并且链路是TCP长连接,在TCP长连接建立后通过TCP协议将缓存队列中的待发短信发送到运营商服务器端。
例如,短信平台可以通过中国移动、联通、电信等运营商直接提供的短信发送接口,实现与客户指定号码进行短信批量发送和自定义发送的目的。短信平台与运营商间建立链路,短信平台中运行多个线程,通过建立的链路进行短信收发,短信平台和一个运营商间可以建立多条短信通道。
在一个实施例中,短信平台为每一个短信通道都设置一个缓存队列,缓存队列的长度为此缓存队列所对应的短信通道每秒发送短信数量的上限阈值。例如,短信平台为每一条短信通道设置一块内存区域,为每个短信通道设置一个缓存队列,用以缓存待发短信。缓存空间设置为100个位置,每个位置存放一条待发短信,即最大容纳为100条待发短信。
移动、电信、联通等运营商会规定短信平台与其连接的短信通道的发送上限,如50条/s、100条/s、500条/s等。根据短信通道发送上限,为每条短信通道开辟一块缓存空间(队列),缓存空间大小与每秒发送短信上限一致,即50条/s的短信通道设置50条短信缓存空间。
短信平台启动第一线程扫描缓存队列,当确定缓存队列中存在空余位置时,根据空余位置的数量从数据库获取待发送的短信放入缓存队列中;短信平台启动第二线程,用于从缓存队列中获取待发送的短信并通过短信通道发送至运营商服务器端。
短信平台根据短信通道的发送速率上限,为每一条短信通道开辟一块缓存队列,启动线程随时扫描缓存队列,如果发现缓存队列有空余位置,则根据空余位置数量从数据库获取待发送短信放入缓存队列等待发送。从数据库获取待发送短信的数量,需要对短信通道的状态及发送质量进行判断,例如,通道是否活跃、通道现在并发量是多少等,需要根据短信通道的状态对内存队列进行伸缩性调整,然后线程随时扫描缓存队列,根据空余位置数量,从数据库获取对应数量的待发短信进入缓存队列待命。
短信平台启动线程负责从缓存队列中获取待发短信,通过与运营商的通讯连接发送至运营商。短信平台与运营商的连接链路是TCP长连接,将缓存队列中的待发短信直接发往运营商,不需要频繁访问数据库,有效提升短信转发速度,使得运营商通道的利用率可以最大化。由于内存的读写速度很快,使用了内存队列来进行数据的预处理,可以适应短信这个业务的高速度和高性能的要求。
在一个实施例中,短信状态报告(SMS-STATUSREPORT)是一种特定格式的短信,简称状态报告。从运营商到短信平台传送状态报告,用以表示短信发送状态。短信平台每下发一条短信,运营商将对应返回一个状态报告。状态报告包括状态报告码及其描述信息,描述信息包括接收异常、网络异常、业务网关超过限制的流量等。移动、电信及联通运营商反馈短信平台的状态报告不统一,例如同样对于发送成功,移动、电信及联通利用不同的状态报告码进行描述。可以按照状态报告码对应的发送状态划分。
短信平台从状态报告中提取状态报告码,基于状态报告码进行分类并获得短信的发送状态,发送状态包括:提交成功、提交失败、发送成功、发送失败等。短信平台根据发送状态统计与运营商服务器端对应的发送短信的成功率。如果确定运营商服务器端发送短信的成功率低于预设的阈值,阈值可以为50、60%等,则对与此运营商服务器端对应的短信通道进行限速或降速处理,减少与此短信通道对应的缓存队列的长度,用于适配限速或降速后的短信通道的发送速率。例如,缓存队列原有的长度为50,进行限速或降速处理后,缓存队列原有的长度为30,缓存队列减少的长度由发送短信的成功率决定。
短信通道的状态包括开启和关闭。通道开启表示短信平台与运营商通信正常,可以进行短信发送,通道关闭表示短信平台与运营商通信断开,无法进行短信下发。通道发送质量为短信平台向运营商发送短信的成功率,可以通过每次短信发送返回结果计算得出。运营商为保证整体发送效果,有时会对短信通道进行限速或降速处理,可能导致短信拥塞,发送成功率降低。需要根据通道状态及发送质量,适时调整对应通道的缓存空间大小;然后根据缓存剩余空间大小从数据库获取适当数量的短信至缓存空间,以达到适配通道发送速率的效果。
图2为根据本发明的短信下发方法的一个实施例的对数据进行保障的流程示意图,如图2所示:
步骤201,短信平台对缓存队列中的短信数据进行序列化处理,可以采用多种现有的序列化方法
步骤202,当确定出现系统异常时,短信平台将序列化的短信数据存储在本地硬盘中。
步骤203,在进行短信数据恢复时,短信平台从硬盘中获取序列化的短信数据并进行反序列化处理,将进行反序列化处理后的短信数据存储在缓存队列中。
使用缓存队列的时候要固定好缓存队列数据格式,防止同样的数据被误操作或出现争抢资源的情况。缓存队列的高速可读性,需要进行灾备控制,如果程序出现异常,缓存队列中的数据需要保留下来,下次重启后进行数据恢复,防止业务数据的丢失。可以使用BoundedLinkedQueue队列对数据进行存储,实行先进先出的原则对短信进行下发,而且对缓存中的数据进行了序列化处理。在程序异常状态下,序列化的数据会落到本地硬盘中,下次恢复时会将数据反序列化进行恢复,保证数据的恢复。数据的落地和还原可以在出现故障问题的时候为了保证内存队列中的数据安全不丢失进行操作,内存对数据进行持久化处理,同步内存数据的落地和还原。
如图3所示,本发明提供一种短信平台30,包括:通道建立模块31、缓存设立模块32、短信发送模块33、调整确定模块34、调整执行模块35和数据保障模块36。通道建立模块31建立其与运营商服务器端37之间的短信通道,用于发送短信。缓存设立模块32设置与短信通道的发送速率相对应的缓存队列,用以缓存通过短信通道向运营商服务器端37发送的短信。
短信发送模块33将缓存队列中的待发短信发送给运营商服务器端37,并接收到运营商服务器端37返回的对于发送短信的状态报告。调整确定模块35短信平台基于状态报告确定短信发送状态,根据短信发送状态判断是否需要调整向运营商服务器端37提交短信的速率。如果需要调整向运营商服务器端提交短信的速率,则调整执行模块35调整缓存队列的长度,用以调整与此缓存队列相对应的短信通道的短信发送速率。
通道建立模块31与运营商服务器端37提供的短信发送接口建立链路,通过建立的链路与运营商服务器端37进行短信收发。短信平台30和一个运营商服务器端37之间建立一条或多条链路。链路作为短信通道,并且链路是TCP长连接。短信发送模块33在TCP长连接建立后通过TCP协议将缓存队列中的待发短信发送到运营商服务器端。
缓存设立模块32为每一个短信通道都设置一个缓存队列,其中,缓存队列的长度为此缓存队列所对应的短信通道每秒发送短信数量的上限阈值。短信发送模块33启动第一线程扫描缓存队列,当确定缓存队列中存在空余位置时,根据空余位置的数量从数据库获取待发送的短信放入缓存队列中。短信发送模块33启动第二线程,用于从缓存队列中获取待发送的短信并通过短信通道发送至运营商服务器端。
调整确定模块34从状态报告中提取状态报告码,基于状态报告码进行分类并获得短信的发送状态,发送状态包括:提交成功、提交失败、发送成功、发送失败等。调整确定模块34根据发送状态统计与运营商服务器端对应的发送短信的成功率。如果确定运营商服务器端发送短信的成功率低于预设的阈值,则调整执行模块35对与此运营商服务器端对应的短信通道进行限速或降速处理,减少与此短信通道对应的缓存队列的长度,用于适配限速或降速后的短信通道的发送速率。
数据保障模块36对缓存队列中的短信数据进行序列化处理。当确定出现系统异常时,数据保障模块36将序列化的短信数据存储在本地硬盘中。在进行短信数据恢复时,数据保障模块36从硬盘中获取序列化的短信数据并进行反序列化处理,将进行反序列化处理后的短信数据存储在缓存队列中。
在一个实施例中,如图4所示,提供一种短信平台,该装置可包括存储器41和处理器42,存储器41用于存储指令,处理器42耦合到存储器41,处理器42被配置为基于存储器41存储的指令执行实现上述的短信下发方法。
存储器41可以为高速RAM存储器、非易失性存储器(non-volatile memory)等,存储器41也可以是存储器阵列。存储器41还可能被分块,并且块可按一定的规则组合成虚拟卷。处理器42可以为中央处理器CPU,或专用集成电路ASIC(Application SpecificIntegrated Circuit),或者是被配置成实施本发明的短信下发方法的一个或多个集成电路。
在一个实施例中,本发明提供一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,指令被处理器执行时实现如上任一个实施例中的短信下发方法。
上述实施例中的短信下发方法和短信平台,短信平台建立其与运营商服务器端之间的短信通道,设置与短信通道相对应的缓存队列,将缓存队列中的待发短信发送给运营商服务器端,并接收到运营商服务器端返回的状态报告;短信平台基于状态报告确定短信发送状态,根据短信发送状态调整缓存队列的长度,用以调整短信通道的短信发送速率;业务处理速度快,能够减少服务器压力,不需要频繁访问数据库,有效提升短信转发速度,使得运营商通道的利用率可以最大化,使用内存队列进行数据的预处理,可以适应短信这个业务的高速度和高性能的要求,可以适时调整缓存空间大小,以达到适配通道发送速率的效果,并可以对短信数据进行容灾备份处理,并能够增强客户的体验度。
可能以许多方式来实现本发明的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和系统。用于方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。