消息推送装置及方法
技术领域
本发明涉及通信技术领域,尤其涉及一种消息推送装置及方法。
背景技术
SNS系统又称SNS程序、SNS软件、社交网络系统,是一个建设社交网络网站(如人人网、开心网)的程序。一个完整的SNS系统通常具备日志、相册、分享、群组、心情、投票等多个功能模块,通过插件机制及开放API(Application Programming Interface,应用程序编程接口)还能扩展功能应用。其中最重要的是Feed系统,Feed系统是SNS类应用的核心和最复杂的部分,类似于新浪微博中看到的“我关注的人”的消息,或人人网中的“新鲜事”、个人订阅的消息、关注信息等等。
在消息订阅类型的应用中,一个明星有几十万到几百万的关注粉丝是很常见的事。当该明星发布一条消息后,关注该明星的所有粉丝均需要收到该条消息的提示。常规方式有两种,一种是采用推的方式,即一条消息针对订阅其的用户,产生对应条数的推送消息发送至个人用户的收件箱(即消息接收单元)中,也就是说该明星发布一条消息后,后台服务器就会产生几十万甚至是几百万的记录并入库,此时,会给服务器带来很大的压力。另一种是采用拉的方式,即该明星发布的消息在数据库中只存储一条,由每个用户的终端连接上来时,自行去数据库中查询记录获得该消息,但此时会给数据库造成很大的压力。这两种方式下,用户查询推送消息的效率都很低。
发明内容
本发明的主要目的在于提出一种消息推送装置及方法,旨在提高用户查询推送消息的效率。
为实现上述目的,本发明提供一种消息推送装置,所述消息推送装置包括:
确定模块,用于在接收到发布者发布的一条新消息后,获取在线用户列表和关注所述发布者的推送对象,并根据获取到的所述在线用户列表和所述推送对象,确定出在线推送对象和离线推送对象;
生成模块,用于根据所述在线推送对象和所述新消息,生成与所述在线推送对象中用户相应个数的推送消息;
推送模块,用于将生成的推送消息对应存储在所述在线推送对象中各个用户的消息接收单元,并将所述新消息的标识记录在所述离线推送对象中的各个用户的未读消息列表中。
可选的,所述消息推送装置还包括:
第一处理模块,用于当接收到所述在线推送对象中的第一用户发送的读取未读消息的请求时,从所述第一用户的消息接收单元读取相应的推送消息并返回给所述第一用户。
可选的,所述消息推送装置还包括:
第二处理模块,用于当接收到所述离线推送对象中的第二用户发送的读取未读消息的请求时,根据所述第二用户的未读消息列表从数据库中查询标识对应的新消息,并将查询到的新消息对应生成的推送消息返回给所述第二用户。
可选的,所述消息推送装置还包括维护模块,所述维护模块包括:
判断单元,用于用户上线后,获取所述用户本次登录的时间,并判断所述用户是否存在于所述在线用户列表中;
第一更新单元,用于如果所述用户已存在于所述在线用户列表中,则以所述用户本次登录的时间更新所述用户在所述在线用户列表中的最近一次登录时间,并根据更新后的最近一次登录时间和预置的在线维持时间间隔,计算并更新所述用户的在线截止时间;
第二更新单元,用于如果所述用户不存在于所述在线用户列表中,则将所述用户的用户标识、本次登录的时间、由本次登录的时间和所述在线维持时间间隔相加计算出的在线截止时间,对应添加到所述在线用户列表中。
可选的,所述维护模块还包括:
记录删除模块,用于如果所述在线用户列表中当前用户的在线截止时间大于当前时间,则将当前用户对应的记录从所述在线用户列表中删除。
为实现上述目的,本发明还提供一种消息推送方法,所述消息推送方法包括:
在接收到发布者发布的一条新消息后,获取在线用户列表和关注所述发布者的推送对象,并根据获取到的所述在线用户列表和所述推送对象,确定出在线推送对象和离线推送对象;
根据所述在线推送对象和所述新消息,生成与所述在线推送对象中用户相应个数的推送消息;
将生成的推送消息对应存储在所述在线推送对象中各个用户的消息接收单元,并将所述新消息的标识记录在所述离线推送对象中的各个用户的未读消息列表中。
可选的,所述消息推送方法还包括:
当接收到所述在线推送对象中的第一用户发送的读取未读消息的请求时,从所述第一用户的消息接收单元读取相应的推送消息并返回给所述第一用户。
可选的,所述消息推送方法还包括:
当接收到所述离线推送对象中的第二用户发送的读取未读消息的请求时,根据所述第二用户的未读消息列表从数据库中查询标识对应的新消息,并将查询到的新消息对应生成的推送消息返回给所述第二用户。
可选的,所述消息推送方法还包括所述在线用户列表的维护,所述在线用户列表的维护包括:
用户上线后,获取所述用户本次登录的时间,并判断所述用户是否存在于所述在线用户列表中;
如果所述用户已存在于所述在线用户列表中,则以所述用户本次登录的时间更新所述用户在所述在线用户列表中的最近一次登录时间,并根据更新后的最近一次登录时间和预置的在线维持时间间隔,计算并更新所述用户的在线截止时间;
如果所述用户不存在于所述在线用户列表中,则将所述用户的用户标识、本次登录的时间、由本次登录的时间和所述在线维持时间间隔相加计算出的在线截止时间,对应添加到所述在线用户列表中。
可选的,所述在线用户列表的维护还包括:
如果所述在线用户列表中当前用户的在线截止时间大于当前时间,则将当前用户对应的记录从所述在线用户列表中删除。
本发明提出的消息推送装置及方法,对于发布者发布的一条新消息,仅对确定为在线推送对象中的用户生成相应个数的推送消息,并将生成的推送消息对应存储在所述在线推送对象中的各个用户的消息接收单元,以使所述在线推送对象中的用户请求查看所述新消息时,从所述消息接收单元读取相应的推送消息;而对于确定为离线推送对象中的用户,仅在其未读消息列表中记录所述新消息的标识,以使所述离线推送对象中的用户请求查看所述新消息时,根据所述未读消息列表中记录的所述标识获取所述新消息,大大减少了服务器在短时间内生成推送消息的数量,降低了单纯采用推方式时服务器的处理压力及单纯采用拉方式时数据库的处理压力,从而提高了用户查看推送消息的效率。
附图说明
图1为本发明第一实施例的消息推送装置的功能模块示意图;
图2为本发明一实施例的服务器的硬件结构示意图;
图3为本发明第二实施例的消息推送装置的功能模块示意图;
图4为本发明第三实施例的消息推送装置的功能模块示意图;
图5为本发明第四实施例的消息推送装置中维护模块的细化功能模块示意图;
图6为本发明第五实施例的消息推送装置中维护模块的细化功能模块示意图;
图7为本发明第一实施例的消息推送方法的流程示意图;
图8为本发明第二实施例的消息推送方法的流程示意图;
图9为本发明第三实施例的消息推送方法的流程示意图;
图10为本发明消息推送方法第四实施例中维护在线用户列表的细化流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种消息推送装置,如图1所示,示出了本发明消息推送装置第一实施例的功能模块示意图,消息推送装置包括:
确定模块100,用于在接收到发布者发布的一条新消息后,获取在线用户列表和关注发布者的推送对象,并根据获取到的在线用户列表和推送对象,确定出在线推送对象和离线推送对象;
本发明消息推送装置可设置在服务器上,并由服务器的处理器提供相应的功能。服务器可应用在消息订阅类型的系统中,如Feed系统。参照图2,图2为服务器的一个硬件结构示意图,服务器可以为一个独立的物理服务器,包括处理器10、内存20、存储器30(如硬盘)、系统总线40、通信装置50等,服务器上安装有系统程序、应用程序(如数据库)等;服务器还可以由几个物理服务器组成,这些物理服务器按照提供的功能可分为应用服务器、数据库服务器、缓存服务器、消息队列服务器等细化服务器,此时,消息推送装置可设置在应用服务器上,应用服务器能够与其他细化服务器之间进行通信,每个细化服务器均包括处理器10、内存20、存储器30(如硬盘)、系统总线40、通信装置50等,且安装有系统程序和应用程序等,另外,两种或两种以上的细化服务器提供的功能可根据需求设置在同一台物理服务器上。
在消息订阅类型的应用中,当一个用户发布一条新消息时,该用户就是该新消息的发布者。以上述第二种服务器为例,在该应用的应用服务器接收到该用户发布新消息的请求时,应用服务器同时能够获取到发布者发布的新消息。一方面,应用服务器会将发布者发布的新消息存储在数据库中,并将新消息发布出去,另一方面,应用服务器的确定模块100获取存储在应用服务器上的在线用户列表,并从数据库中查询关注发布者的所有用户,这些关注发布者的用户即为新消息的推送对象。其中,推送对象中所包含的用户的总数大于或等于0,根据实际查询结果而定。数据库可设置在应用服务器中,还可设置在一个独立的数据库服务器中。
在线用户列表由应用服务器根据用户的实际登录情况统计得出,并存储在应用服务器中。在线用户列表记录有维持在线用户的用户标识、最近一次登录时间、在线截止时间,其中,在线截止时间由对应的最近一次登录时间和预置的在线维持时间间隔相加计算得出,且在在线用户列表中的用户的在线截止时间均大于或等于应用服务器当前的系统时间。最近一次登录时间和在线截止时间可精确到年月日时分秒,在线维持时间间隔的单位为小时,也可以为分钟等。
应用服务器的确定模块100将既存在于推送对象中同时又存在于在线用户列表中的用户,确定为在线推送对象。在线推送对象中的用户,并不一定是当前正在在线活跃的用户,也就是说,在线推送对象中用户不仅可以是推送对象中当前正在在线活跃的用户,还可以是推送对象中按照在线用户列表统计被认为仍保持在线的用户。确定模块100中,在确定出推送对象中的在线推送对象后,推送对象中除在线推送对象中用户外的剩余用户即为离线推送对象。
生成模块200,用于根据在线推送对象和新消息,生成与在线推送对象中用户相应个数的推送消息;
应用服务器在获取到在线推送对象后,生成模块200将新消息按照在线推送对象中所包含的用户的总数,生成相应个数的推送消息,也即,在线推送对象中的每一个用户对应有一个待发送的推送消息。而对于离线推送对象中的用户,应用服务器的生成模块200则不会给这些用户生成相应的推送消息,也就是说,应用服务器仅对在线推送对象中的用户采用推方式进行新消息的推送,与现有的生成与推送对象中用户的总数相应个数的推送消息的方式相比,可大大减少应用服务器在短时间内生成推送消息的数量,降低了应用服务器的处理压力。
推送模块300,用于将生成的推送消息对应存储在在线推送对象中各个用户的消息接收单元,以使在线推送对象中的用户请求查看新消息时,从消息接收单元读取相应的推送消息;将新消息的标识记录在离线推送对象中的各个用户的未读消息列表中,以使离线推送对象中的用户请求查看新消息时,根据未读消息列表中记录的标识获取新消息。
在消息订阅类型的应用中,每个注册成功的用户在服务器端对应有一个消息接收单元,如收件箱,用于接收用户未查收的未读消息。消息接收单元可设置在一个独立的缓存服务器中,也可设置在应用服务器的缓存区中。
应用服务器在生成与在线推送对象中用户总数相应个数的推送消息后,推送模块300将各个推送消息对应存储在在线推送对象中各个用户的消息接收单元,而对于离线推送对象中的用户,应用服务器的推送模块300将新消息的标识等信息记录在各个用户的未读消息列表中,以采用推拉结合的方式对用户请求查看新消息的请求作出响应处理。其中,未读消息列表记录了用户离线期间未接收到的推送消息的信息。
可以理解,未读消息列表还可以理解为,用户所接收的所有消息中处于未读状态的消息的集合,处于未读状态的消息的详细内容可在用户刷新相应页面时由应用服务器即时查询数据库获得。
本发明提出的消息推送装置,对于发布者发布的一条新消息,仅对确定为在线推送对象中的用户生成相应个数的推送消息,并将生成的推送消息对应存储在在线推送对象中的各个用户的消息接收单元,以使在线推送对象中的用户请求查看新消息时,从消息接收单元读取相应的推送消息;而对于确定为离线推送对象中的用户,仅在其未读消息列表中记录新消息的标识,以使离线推送对象中的用户请求查看新消息时,根据未读消息列表中记录的标识获取新消息,大大减少了服务器在短时间内生成推送消息的数量,采用推拉结合的方式,降低了单纯采用推方式时服务器的处理压力及单纯采用推方式时数据库的处理压力,从而提高了用户查看推送消息的效率。
进一步地,参照图3,基于第一实施例提出本发明消息推送装置第二实施例,在本实施例中,消息推送装置还包括:
第一处理模块400,用于当接收到在线推送对象中的第一用户发送的读取未读消息的请求时,从第一用户的消息接收单元读取相应的推送消息并返回给第一用户。
第一用户是指在线推送对象中的任一用户。当在线推送对象中的第一用户根据应用上的提示想要查看新消息时,第一用户的终端向应用服务器发送读取未读消息的请求,应用服务器的第一处理模块400在接收到相应的请求后,从第一用户的消息接收单元读取相应的推送消息并返回给第一用户查看,且在推送消息被成功接收后,应用服务器将第一用户的消息接收单元中的该推送消息删除。其中,第一用户的终端可以为具有通信功能的任意终端。
本发明提出的消息推送装置,当在线推送对象中的用户请求查看新消息时,从服务器上用户的消息接收单元中读取缓存的相应推送消息,而无需从庞大的数据库中查找数据,提高了用户查看未读消息的效率,同时也降低了数据库查询数据的压力。
进一步地,参照图4,基于第二实施例提出本发明消息推送装置第三实施例,在本实施例中,消息推送装置还包括:
第二处理模块500,用于当接收到离线推送对象中的第二用户发送的读取未读消息的请求时,根据第二用户的未读消息列表从数据库中查询标识对应的新消息,并将查询到的新消息对应生成的推送消息返回给第二用户。
第二用户是指离线推送对象中的任一用户。当第二用户上线后请求查看未读的推送消息时,应用服务器的第二处理模块500根据第二用户的未读消息列表中各个新消息的标识,采用拉方式获取相应的推送消息,也即,从数据库中查询相应发布者的相应原始新消息,并根据查询结果生成相应的推送消息返回给第二用户查看。
本发明提出的消息推送装置,对于确定为离线推送对象中的用户,通过记录在未读消息列表中的新消息的标识,在离线推送对象中的用户请求读取新消息时,从数据库中读取发布者的原始新消息并生成相应的推送消息后发送给用户,从而实现新消息的推送,与全用户(即推送对象中所有用户)的数据拉取相比,降低了数据库的处理压力。
进一步地,参照图5,基于第三实施例提出本发明消息推送装置第四实施例,在本实施例中,消息推送装置还包括维护模块600,维护模块600包括:
判断单元601,用于用户上线后,获取用户本次登录的时间,并判断用户是否存在于在线用户列表中;
每个用户在账号验证通过后即处于上线状态,此时,应用服务器会记录用户在本次登录的时间,其中,本次登录的时间可精确到年月日时分秒。之后,应用服务器的判断单元601根据用户的标识,判断用户是否存在于在线用户列表中。
第一更新单元602,用于如果用户已存在于在线用户列表中,则以用户本次登录的时间更新用户在在线用户列表中的最近一次登录时间,并根据更新后的最近一次登录时间和预置的在线维持时间间隔,计算并更新用户的在线截止时间;
如果用户的标识与在线用户列表中一个用户的标识相同,则认为用户存在于在线用户列表中,此时,应用服务器的第一更新单元602会将用户在在线用户列表中对应的最近一次登录时间,更新为用户的本次登录时间,并根据更新后的最近一次登录时间和在线维持时间间隔,重新计算用户的在线截止时间。
第二更新单元603,用于如果用户不存在于在线用户列表中,则将用户的用户标识、本次登录的时间、由本次登录的时间和在线维持时间间隔相加计算出的在线截止时间,对应添加到在线用户列表中。
如果用户的标识与在线用户列表中任意一个用户的标识都不相同,则认为用户不存在于在线用户列表中,此时,应用服务器的第二更新单元603将为用户增加一条记录,该记录包含了用户的标识、用户本次登录的时间,以及根据用户的本次登录时间和在线维持时间间隔计算得到的在线截止时间。
本发明提出的消息推送装置,设置了一个在线维持时间间隔,使得用户自最近一次登录时间开始,在在线维持时间间隔内,均被视为在线用户,从而在被视为仍保持在线的用户登录后,能够快速获取服务器缓存的推送消息,提高了用户查看推送消息的效率。
进一步地,参照图6,基于第四实施例提出本发明消息推送装置第五实施例,在本实施例中,维护模块600还包括:
记录删除模块604,用于如果在线用户列表中当前用户的在线截止时间大于当前时间,则将当前用户对应的记录从在线用户列表中删除。
当前时间可以为应用服务器的系统时间。如果在线用户列表中的一个用户的在线截止时间大于应用服务器的系统时间,则表明该用户不再被视为保持在线,此时,应用服务器的记录删除模块604将把该用户的记录从在线用户列表中删除,以保证在线用户列表中的每一个用户均满足视为保持在线的条件。
本发明提出的消息推送装置,在在线用户列表中的一个用户的在线截止时间大于应用服务器的系统时间时,便将该用户的记录从在线用户列表中删除,从而实现实时维护在线用户列表中数据的正确性,为服务器正确地确定出在线推送对象和离线推送对象做基础。
本发明进一步提供一种消息推送方法,如图7所示,示出了本发明消息推送方法第一实施例的流程示意图,消息推送方法包括:
S10、在接收到发布者发布的一条新消息后,获取在线用户列表和关注发布者的推送对象,并根据获取到的在线用户列表和推送对象,确定出在线推送对象和离线推送对象;
本发明消息推送方法基于服务器来实施,并由服务器的处理器执行相应的步骤。服务器可应用在消息订阅类型的系统中,如Feed系统。参照图2,图2为服务器的一个硬件结构示意图,服务器可以为一个独立的物理服务器,包括处理器10、内存20、存储器30(如硬盘)、系统总线40、通信装置50等,服务器上安装有系统程序、应用程序(如数据库)等;服务器还可以由几个物理服务器组成,这些物理服务器按照提供的功能可分为应用服务器、数据库服务器、缓存服务器、消息队列服务器等细化服务器,此时,消息推送装置可设置在应用服务器上,应用服务器能够与其他细化服务器之间进行通信,每个细化服务器均包括处理器10、内存20、存储器30(如硬盘)、系统总线40、通信装置50等,且安装有系统程序和应用程序等,另外,两种或两种以上的细化服务器提供的功能可根据需求设置在同一台物理服务器上。
在消息订阅类型的应用中,当一个用户发布一条新消息时,该用户就是该新消息的发布者。以上述第二种服务器为例,在该应用的应用服务器接收到该用户发布新消息的请求时,应用服务器同时能够获取到发布者发布的新消息。一方面,应用服务器会将发布者发布的新消息存储在数据库中,并将新消息发布出去,另一方面,应用服务器获取存储其上的在线用户列表,并从数据库中查询关注发布者的所有用户,这些关注发布者的用户即为新消息的推送对象。其中,推送对象中所包含的用户的总数大于或等于0,根据实际查询结果而定。数据库可设置在应用服务器中,还可设置在一个独立的数据库服务器中。
在线用户列表由应用服务器根据用户的实际登录情况统计得出,并存储在应用服务器中。在线用户列表记录有维持在线用户的用户标识、最近一次登录时间、在线截止时间,其中,在线截止时间由对应的最近一次登录时间和预置的在线维持时间间隔相加计算得出,且在在线用户列表中的用户的在线截止时间均大于或等于应用服务器当前的系统时间。最近一次登录时间和在线截止时间可精确到年月日时分秒,在线维持时间间隔的单位为小时,也可以为分钟等。
应用服务器将既存在于推送对象中同时又存在于在线用户列表中的用户,确定为在线推送对象。在线推送对象中的用户,并不一定是当前正在在线活跃的用户,也就是说,在线推送对象中用户不仅可以是推送对象中当前正在在线活跃的用户,还可以是推送对象中按照在线用户列表统计被认为仍保持在线的用户。在确定出推送对象中的在线推送对象后,推送对象中除在线推送对象中用户外的剩余用户即为离线推送对象。
S20、根据在线推送对象和新消息,生成与在线推送对象中用户相应个数的推送消息;
应用服务器在获取到在线推送对象后,将新消息按照在线推送对象中所包含的用户的总数,生成相应个数的推送消息,也即,在线推送对象中的每一个用户对应有一个待发送的推送消息。而对于离线推送对象中的用户,应用服务器则不会给这些用户生成相应的推送消息,也就是说,应用服务器仅对在线推送对象中的用户采用推方式进行新消息的推送,与现有的生成与推送对象中用户的总数相应个数的推送消息的方式相比,可大大减少应用服务器在短时间内生成推送消息的数量,降低了应用服务器的处理压力。
S30、将生成的推送消息对应存储在在线推送对象中各个用户的消息接收单元,以使在线推送对象中的用户请求查看新消息时,从消息接收单元读取相应的推送消息;将新消息的标识记录在离线推送对象中的各个用户的未读消息列表中,以使离线推送对象中的用户请求查看新消息时,根据未读消息列表中记录的标识获取新消息。
在消息订阅类型的应用中,每个注册成功的用户在服务器端对应有一个消息接收单元,如收件箱,用于接收用户未查收的未读消息。消息接收单元可设置在一个独立的缓存服务器中,也可设置在应用服务器的缓存区中。
应用服务器在生成与在线推送对象中用户总数相应个数的推送消息后,将各个推送消息对应存储在在线推送对象中各个用户的消息接收单元,而对于离线推送对象中的用户,应用服务器将新消息的标识等信息记录在各个用户的未读消息列表中,以采用推拉结合的方式对用户请求查看新消息的请求作出响应处理。其中,未读消息列表记录了用户离线期间未接收到的推送消息的信息。
可以理解,未读消息列表还可以理解为,用户所接收的所有消息中处于未读状态的消息的集合,处于未读状态的消息的详细内容可在用户刷新相应页面时由应用服务器即时查询数据库获得。
本发明提出的消息推送方法,对于发布者发布的一条新消息,仅对确定为在线推送对象中的用户生成相应个数的推送消息,并将生成的推送消息对应存储在在线推送对象中的各个用户的消息接收单元,以使在线推送对象中的用户请求查看新消息时,从消息接收单元读取相应的推送消息;而对于确定为离线推送对象中的用户,仅在其未读消息列表中记录新消息的标识,以使离线推送对象中的用户请求查看新消息时,根据未读消息列表中记录的标识获取新消息,大大减少了服务器在短时间内生成推送消息的数量,采用推拉结合的方式,降低了单纯采用推方式时服务器的处理压力及单纯采用拉方式时数据库的处理压力,从而提高用户查看推送消息的效率。
进一步地,参照图8,基于上述第一实施例提出本发明消息推送方法第二实施例,在本实施例中,消息推送方法还包括:
S41、当接收到在线推送对象中的第一用户发送的读取未读消息的请求时,从第一用户的消息接收单元读取相应的推送消息并返回给第一用户。
第一用户是指在线推送对象中的任一用户。当在线推送对象中的第一用户根据应用上的提示想要查看新消息时,第一用户的终端向应用服务器发送读取未读消息的请求,应用服务器在接收到相应的请求后,从第一用户的消息接收单元读取相应的推送消息并返回给第一用户查看,且在推送消息被成功接收后,应用服务器将第一用户的消息接收单元中的该推送消息删除。其中,第一用户的终端可以为具有通信功能的任意终端。
本发明提出的消息推送方法,当在线推送对象中的用户请求查看新消息时,从服务器上用户的消息接收单元中读取缓存的相应推送消息,而无需从庞大的数据库中查找数据,提高了用户查看未读消息的效率,同时也降低了数据库查询数据的压力。
进一步地,参照图9,基于上述第一实施例提出本发明消息推送方法第三实施例,在本实施例中,消息推送方法还包括:
S42、当接收到离线推送对象中的第二用户发送的读取未读消息的请求时,根据第二用户的未读消息列表从数据库中查询标识对应的新消息,并将查询到的新消息对应生成的推送消息返回给第二用户。
第二用户是指离线推送对象中的任一用户。当第二用户上线后请求查看未读的推送消息时,应用服务器根据第二用户的未读消息列表中各个新消息的标识,采用拉方式获取相应的推送消息,也即,从数据库中查询相应发布者的相应原始新消息,并根据查询结果生成相应的推送消息返回给第二用户查看。
本发明提出的消息推送方法,对于确定为离线推送对象中的用户,通过记录在未读消息列表中的新消息的标识,在离线推送对象中的用户请求读取新消息时,从数据库中读取发布者的原始新消息并生成相应的推送消息后发送给用户,从而实现新消息的推送,与全用户(即推送对象中所有用户)的数据拉取相比,降低了数据库的处理压力。
进一步地,参照图10,基于上述第二实施例或上述第三实施例提出本发明消息推送方法第四实施例,在本实施例中,消息推送方法还包括在线用户列表的维护,在线用户列表的维护包括:
S51、用户上线后,获取用户本次登录的时间,并判断用户是否存在于在线用户列表中;
每个用户在账号验证通过后即处于上线状态,此时,应用服务器会记录用户在本次登录的时间,其中,本次登录的时间可精确到年月日时分秒。之后,应用服务器根据用户的标识,判断用户是否存在于在线用户列表中。
S52、如果用户已存在于在线用户列表中,则以用户本次登录的时间更新用户在在线用户列表中的最近一次登录时间,并根据更新后的最近一次登录时间和预置的在线维持时间间隔,计算并更新用户的在线截止时间;
如果用户的标识与在线用户列表中一个用户的标识相同,则认为用户存在于在线用户列表中,此时,应用服务器会将用户在在线用户列表中对应的最近一次登录时间,更新为用户的本次登录时间,并根据更新后的最近一次登录时间和在线维持时间间隔,重新计算用户的在线截止时间。
S53、如果用户不存在于在线用户列表中,则将用户的用户标识、本次登录的时间、由本次登录的时间和在线维持时间间隔相加计算出的在线截止时间,对应添加到在线用户列表中。
如果用户的标识与在线用户列表中任意一个用户的标识都不相同,则认为用户不存在于在线用户列表中,此时,应用服务器将为用户增加一条记录,该记录包含了用户的标识、用户本次登录的时间,以及根据用户的本次登录时间和在线维持时间间隔计算得到的在线截止时间。
本发明提出的消息推送方法,设置了一个在线维持时间间隔,使得用户自最近一次登录时间开始,在在线维持时间间隔内,均被视为在线用户,从而在被视为仍保持在线的用户登录后,能够快速获取服务器缓存的推送消息,提高了用户查看推送消息的效率。
进一步地,基于上述第四实施例提出本发明消息推送方法第五实施例,在本实施例中,在线用户列表的维护还包括:
如果在线用户列表中当前用户的在线截止时间大于当前时间,则将当前用户对应的记录从在线用户列表中删除。
当前时间可以为应用服务器的系统时间。如果在线用户列表中的一个用户的在线截止时间大于应用服务器的系统时间,则表明该用户不再被视为保持在线,此时,应用服务器将把该用户的记录从在线用户列表中删除,以保证在线用户列表中的每一个用户均满足视为保持在线的条件。
本发明提出的消息推送方法,在在线用户列表中的一个用户的在线截止时间大于应用服务器的系统时间时,便将该用户的记录从在线用户列表中删除,从而实现实时维护在线用户列表中数据的正确性,为服务器正确地确定出在线推送对象和离线推送对象做基础。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。