本发明涉及数字信息的传输领域,特别涉及离线消息推送方法与装置。
背景技术:
目前。在现在很多系统或者APP应用程序中,都存在使用消息推送的功能。而实际情况是,一般APP系统的客户端数量会达到几十上百万之多。如此多的APP每一个均需要与服务器保持有一个长连接,这样就存在有几十上百万的长连接来连接到服务器上。同时,已建立长连接的APP需要每隔一定时间发送心跳包给服务器,由服务端来明确该个APP设备是否已经断线的标识。在这种几十万到几百万的长连接来连接到服务器的情况,通常会给服务器带来了很大的压力。
由于手机客户端的网络情况不稳定,经常会出现断网、重新联网,或者网络切换等等网络上的问题。由此,推送消息分为在线推送和离线推送两种。当网络稳定而通道建立时,则手机客户端在线,从而进行消息的在线推送。当断网或者其他情况,则通道未成功建立,则表示手机客户端不在线,服务端保存离线消息,待客户端下次上线时,进行离线消息的发送。
但是,现有的离线消息处理方案,均难以处理大量的离线用户短时间内重新连接,则皆需要获取自己的离线消息时,会给服务端带来很大的压力,从而容易导致服务器宕机。
技术实现要素:
本发明的主要目的是提供离线消息推送方法与装置,旨在提高离线推送消息的稳定性。
为实现上述目的,本发明提出的一种离线消息推送方法,用于服务器推送消息,包括如下步骤:
在客户端离线时,将需要推送至所述客户端的推送消息保存至第一预设位置;
在客户端上线并且获得对应所述客户端的请求消息时,根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端。
优选的,所述在客户端离线时,将需要推送至所述客户端的推送消息保存至第一预设位置的步骤具体包括:
在客户端离线时,通过第一线程将需要推送至所述客户端的推送消息保存至第一预设位置。
优选的,所述在客户端上线并且获得对应所述客户端的请求消息时,根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端的步骤具体包括:
在客户端上线并且获得对应所述客户端的请求消息时,通过第二线程根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端。
优选的,所述在客户端上线并且获得对应所述客户端的请求消息时,通过第二线程根据所述请求消息在所述第一预设位置获取对应的所述推送消息的步骤具体包括:
在客户端上线时,获得由所述客户端发出的请求消息;
将所述请求消息保存至第二预设位置;
通过第二线程获取所述第二预设位置中的所述请求消息,并根据所述请求消息在所述第一预设位置获取对应的所述推送消息。
优选的,所述第一预设位置为缓存或数据库;所述第二预设位置为消息队列。
本发明提供的一种离线消息推送装置,用于服务器推送消息,包括:
保存模块,用于在客户端离线时,将需要推送至所述客户端的推送消息保存至第一预设位置;
发送模块,用于在客户端上线并且获得对应所述客户端的请求消息时,根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端。
优选的,所述保存模块具体用于:
在客户端离线时,通过第一线程将需要推送至所述客户端的推送消息保存至第一预设位置。
优选的,所述发送模块具体用于:
在客户端上线并且获得对应所述客户端的请求消息时,通过第二线程根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端。
优选的,所述发送模块包括:
上线单元,用于在客户端上线时,获得由所述客户端发出的请求消息;
储存单元,用于将所述请求消息保存至第二预设位置;
处理单元,用于通过第二线程获取所述第二预设位置中的所述请求消息,并根据所述请求消息在所述第一预设位置获取对应的所述推送消息。
优选的,所述第一预设位置为缓存或数据库;所述第二预设位置为消息队列。
本发明所提供的离线消息推送方法,通过将需要发送的推送消息保存至第一预设位置,然后在客户上线时再根据对应客户端的请求信息,在第一预设位置来查找并发送相应的推送消息至客户端;从而离线消息皆根据请求消息来处理,则可以更稳定的进行消息推送而不会混乱。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
图1为本发明离线消息推送方法第一实施例的流程图;
图2为本发明离线消息推送方法第二实施例的流程图;
图3为本发明离线消息推送方法第三实施例的流程图;
图4为本发明离线消息推送方法第四实施例的流程图;
图5为本发明离线消息推送装置一实施例的模块示意图;
图6为图5中发送模块的模块化示意图;
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参看图1,本发明离线消息推送方法第一实施例,用于服务器推送消息,包括如下步骤:
步骤S100,在客户端离线时,将需要推送至所述客户端的推送消息保存至第一预设位置;其中,客户端为已经注册于服务器;推送消息应当为客户端同意接受的,或者是系统重要性消息而统一发送的;保存的第一预设位置,可以根据客户端的离线情况而区别保存,例如当客户端长时间离线时,可以保存在稳定和慢速的储存介质内,例如硬盘和数据库等;当客户端为短时间断线时,可以保存在快速的储存介质内,例如系统缓存内。
步骤S200,在客户端上线并且获得对应所述客户端的请求消息时,根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端。其中,请求消息,可以是客户端在上线时发送的,也可以是服务器根据上线动作而自动生成的;当然,也可以是客户端选择不接收离线推送,则客户端上线时取消发送请求消息,或者发送不接收离线推送的请求消息。在获得请求消息时,则根据请求消息内的客户端信息查找保存于第一位置内的推送消息,获得该推送消息发送至对应客户端,然后清除该数据所占资源,即在第一预设位置删除已经发送的推送消息。
本实施例,通过将需要发送的推送消息保存至第一预设位置,然后在客户上线时再根据对应客户端的请求信息,在第一预设位置来查找并发送相应的推送消息至客户端;从而离线消息皆根据请求消息来处理,则可以更稳定的进行消息推送而不会混乱。
请参看图2,本实施例提供的第二实施例,以第一实施例为基础,对其中的步骤S100进行调整,所述“在客户端离线时,将需要推送至所述客户端的推送消息保存至第一预设位置”的步骤具体包括:
步骤S110,在客户端离线时,通过第一线程将需要推送至所述客户端的推送消息保存至第一预设位置。
本实施例强调通过第一线程来处理保存推送消息保存至第一预设位置,则可以保证该进程稳定高效的运行。
请参看图3,本实施例提供的第三实施例,以第二实施例为基础,对其中的步骤S200进行调整,所述“在客户端上线并且获得对应所述客户端的请求消息时,根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端。”的步骤具体包括:
步骤S210,在客户端上线并且获得对应所述客户端的请求消息时,通过第二线程根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端。
第二线程是与第一线程不同的线程,本实施例强调通过第二线程来根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端,则可以保证该进程稳定高效的运行。
请参看图4,本实施例提供的第四实施例,以第三实施例为基础,对其中的步骤S210进行细化,所述“在客户端上线并且获得对应所述客户端的请求消息时,通过第二线程根据所述请求消息在所述第一预设位置获取对应的所述推送消息”的步骤具体包括:
步骤S211,在客户端上线时,获得由所述客户端发出的请求消息。其中,客户端在上线成功时,即成功建立长连接通道。此时,客户端根据预设指令发送所述请求消息至客户端,从而请求推送待发的推送消息。
步骤S212,将所述请求消息保存至第二预设位置。其中,第二预设位置可以是储存于普通位置、消息队列或者也可以是消息阵列,可以根据数量和需求来决定。进一步的,该获得并保存请求消息的动作,可以由第一线程来完成。
步骤S213,通过第二线程获取所述第二预设位置中的所述请求消息,并根据所述请求消息在所述第一预设位置获取对应的所述推送消息。其中,第二线程为单独处理该信息,为一个单独完整的流程,从而能够较稳定和高效的处理效果。并且,还可以根据管理员的控制,对第二线程的线程数进行调整,从而适应不同工况的运行压力。
优选的,所述第一预设位置为数据库;所述第二预设位置为消息队列。通过将第一预设位置采用数据库则可以储存大量的数据,并且具有保存数据完整、稳定和便于查找的效果;通过将第二预设位置采用消息队列,则能够使得对请求信息的处理更有秩序,处理起来更稳定和高效。
请参看图5,本发明离线消息推送装置一实施例,用于服务器推送消息,包括:
保存模块100,用于在客户端离线时,将需要推送至所述客户端的推送消息保存至第一预设位置;其中,客户端为已经注册于服务器;推送消息应当为客户端同意接受的,或者是系统重要性消息而统一发送的;保存的第一预设位置,可以根据客户端的离线情况而区别保存,例如当客户端长时间离线时,可以保存在稳定和慢速的储存介质内,例如硬盘和数据库等;当客户端为短时间断线时,可以保存在快速的储存介质内,例如系统缓存内。
发送模块200,用于在客户端上线并且获得对应所述客户端的请求消息时,根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端。其中,请求消息,可以是客户端在上线时发送的,也可以是服务器根据上线动作而自动生成的;当然,也可以是客户端选择不接收离线推送,则客户端上线时取消发送请求消息,或者发送不接收离线推送的请求消息。在获得请求消息时,则根据请求消息内的客户端信息查找保存于第一位置内的推送消息,获得该推送消息发送至对应客户端,然后清除该数据所占资源,即在第一预设位置删除已经发送的推送消息。
本实施例,通过将需要发送的推送消息保存至第一预设位置,然后在客户上线时再根据对应客户端的请求信息,在第一预设位置来查找并发送相应的推送消息至客户端;从而离线消息皆根据请求消息来处理,则可以更稳定的进行消息推送而不会混乱。
优选的,所述保存模块100具体用于:
在客户端离线时,通过第一线程将需要推送至所述客户端的推送消息保存至第一预设位置。
本实施例强调通过第一线程来处理保存推送消息保存至第一预设位置,则可以保证该进程稳定高效的运行。
优选的,所述发送模块200具体用于:
在客户端上线并且获得对应所述客户端的请求消息时,通过第二线程根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端。
本实施例强调通过第二线程来根据所述请求消息在所述第一预设位置获取对应的所述推送消息,并且将所述推送消息发送至所述客户端,则可以保证该进程稳定高效的运行。
请参看图6,所述发送模块200包括:
上线单元210,用于在客户端上线时,获得由所述客户端发出的请求消息;其中,客户端在上线成功时,即成功建立长连接通道。此时,客户端根据预设指令发送所述请求消息至客户端,从而请求推送待发的推送消息。
储存单元220,用于将所述请求消息保存至第二预设位置;其中,第二预设位置可以是储存于普通位置、消息队列或者也可以是消息阵列,可以根据数量和需求来决定。进一步的,该获得并保存请求消息的动作,可以由第一线程来完成。
处理单元230,用于通过第二线程获取所述第二预设位置中的所述请求消息,并根据所述请求消息在所述第一预设位置获取对应的所述推送消息。其中,第二线程为单独处理该信息,为一个单独完整的流程,从而能够较稳定和高效的处理效果。并且,还可以根据管理员的控制,对第二线程的线程数进行调整,从而适应不同工况的运行压力。
优选的,所述第一预设位置为数据库;所述第二预设位置为消息队列。通过将第一预设位置采用数据库则可以储存大量的数据,并且具有保存数据完整、稳定和便于查找的效果;通过将第二预设位置采用消息队列,则能够使得对请求信息的处理更有秩序,处理起来更稳定和高效。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是移动终端,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。