一种消息推送服务的实现方法与系统的制作方法

文档序号:7785851阅读:205来源:国知局
专利名称:一种消息推送服务的实现方法与系统的制作方法
技术领域
本发明涉及互联网领域,特别涉及一种消息推送服务的实现方法与系统。
背景技术
随着互联网的不断发展,客户端与服务端消息传输越来越普遍,为了更好的提高用户体验,提高消息的实时性,通常会在客户端展现时,针对变化的信息和数据进行部分更新变换,避免整体页面的刷新或全部数据的重新请求,消息推送服务系统的设计和实现就变得越来越重要。目前互联网领域主流的消息服务模式为客户端按照一定的时间间隔,对服务端进行轮询请求,将数据拉取到客户端并进行异步展现,此种方式实现简单,但也存在如下一些缺点和不足1)客户端的轮询服务会造成对服务端的持续压力,是服务端服务能力受限,响应能力下降,针对请求的峰值困难;幻客户端的轮询请求会造成客户端性能的下降, 如手机客户端不断轮询服务端,会造成耗电和网络流量的增加,同时对性能较弱的终端也会造成整体性能的影响;3)消息的实时性会有一定影响,因轮询需要月约定轮询的间隔时间,在间隔时间其间,客户端不能收到和处理任何新到的消息,对用户体验会造成影响;4) 非实时的异步轮询请求也会造成网络传输的困扰,在两次轮询间隔其间可能会没有任何消息,造成请求的浪费;同时,也可能在间隔时间期有大量累积的消息,在下次客户端请求的时候一次获取,给网络传输造成压力。

发明内容
本发明提供的,以解决以一定的时间间隔对服务端进行轮询请求导致的问题。本发明提供了一种消息推送服务的实现方法,包括步骤1,推送消息队列接收模块将需要推送的消息存储到消息队列中;步骤2,推送逻辑处理模块轮询所述队列并将消息存储到状态存储模块中用户所对应的Key-Value键值对中;步骤3,用户登录客户端后,客户端向长连接通讯模块发起推送服务请求;步骤4,长连接通讯模块建立并维持与客户端的长连接,并向状态存储模块写入用户的状态;步骤5,长连接通讯模块询问状态存储模块是否有消息推送给用户,如果是,长连接通讯模块则从状态存储模块中取出需要推送的消息发送至客户端,并维持与客户端和状态存储模块的连接状态;否则,长连接通讯模块维持与客户端的长连接。在一个示例中,步骤1中,推送消息队列接收模块将需要推送的消息随机存储到消息队列中。在一个示例中,步骤2中,推送逻辑处理模块按照消息存储到消息队列中的顺序读取消息;推送逻辑处理模块根据消息队列的状态调整线程资源。在一个示例中,步骤2中,状态存储模块以用户的标识符为键值,键值由长连接通讯模块写入;键值对应的值为需要推送的消息,该消息由推送逻辑处理模块写入。在一个示例中,步骤3中,长连接通讯模块采用基于HTTP协议。本发明提供了一种消息推送服务的实现系统,包括推送消息队列接收模块,用于将需要推送的消息存储到消息队列中;推送逻辑处理模块,用于轮询所述消息队列并将消息存储到状态存储模块中用户所对应的Key-Value键值对中;长连接通讯模块,用于在用户登录客户端后,接收客户端向长连接通讯模块发起推送服务请求;建立并维持与客户端的长连接,并向状态存储模块写入用户的状态;询问状态存储模块是否有消息推送给用户;有消息需要推送给用户时,从状态存储模块中取出需要推送的消息发送至客户端,并维持与客户端和状态存储模块的连接状态;没有消息需要推送给用户时,维持与客户端的长连接。在一个示例中,推送消息队列接收模块,用于将需要推送的数据随机存储到消息队列中。在一个示例中,推送逻辑处理模块,用于按照消息存储到消息队列中的顺序读取消息;推送逻辑处理模块,用于根据消息队列的状态调整线程资源。在一个示例中,状态存储模块包括键值对,键值对以用户的标识符为键值,键值由长连接通讯模块写入;键值对应的值为需要推送的消息,该消息由推送逻辑处理模块写入。在一个示例中,长连接通讯模块采用基于HTTP协议。本发明实施例的有益效果是将客户端轮询请求转变为客户端与服务端进行网络通讯的长连接,可进行多个实例的部署,各实例可分担客户端请求访问压力,提高了系统的可用性。


图1为本发明的消息推送服务系统示意图;图2为本发明的消息推送服务方法流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。参见图1,为本发明实施例提供的消息推送服务系统示意图,该系统分为如下几个模块推送消息队列接收模块该模块主要是由消息队列组成,用来接收来自各个外部系统需要推送的消息。利用消息队列来进行写入压力峰值的缓冲,并可以进行异步读写操作,提高系统的灵活性。在可用性方面,该模块针对多个队列实例采用随机写,顺序读的方式,既保证了该模块的高可用性,也避免了复杂架构的维护成本。推送逻辑处理模块该模块主要采用线程池技术,用来读取消息队列中的推送消息信息,将该信息以用户ID的键值形式,按照自定义的可扩展的结构化数据存储结构,异步存储到状态存储模块。该模块可以根据消息队列的状态自动进行线程资源的增减,既可避免消息并发的峰值处理繁忙,又可减少消息量很小时对主机线程资源的浪费等。同时该模块不存在状态,可以进行多实例分布式部署,进行负载均衡等提高系统可用性。状态存储模块该模块为自行实现的高速键值对缓存存储引擎,功能为以用户ID 为键值,存储相应需要推送的消息的结构化数据,该模块的键值ID写入为长连接通讯模块来维护,键值所对应的值的写入为推送逻辑处理模块进行写入维护。存储引擎所维护的用户信息也均为在线用户,业务上对于非在线用户进行消息推送是没有意义的。离线消息的持久化信息会在另外的存储模块中进行维护。该模块可以根据键值存储引擎的特点进行一致性哈希等策略,进行多实例的部署,既可减少单实例系统瓶颈,又可提高系统的可用性。长连接通讯模块该模块基于HTTP协议,内部基于队列和消息触发机制实现的 HTTP长连接服务,在用户上线时,接收到客户端发送的用户推送服务接口请求的时候,该模块维持与客户端的HTTP长连接,同时将该请求用户的ID及其他信息写入状态存储模块,随后将一直保持与状态存储模块的准实时通讯。当发现有新消息需要进行推送的时候,则从状态存储模块中取出欲推送的消息,同时推送给客户端,若没有需要推送的信息,则一直维持长连接而不进行数据通信。同时该模块采用HTTP协议,便于客户端实现和前端基于HTTP 代理的协议分发等策略,可进行多个实例的部署,各实例可分担客户端请求访问压力,可高了系统的可用性。具体请求响应的工作流程如图2所示步骤10,推送消息队列接收模块实时接收需要推送的数据并混存到队列中。步骤11,推送逻辑处理模块轮询队列,将数据组装成推送的结构化数据,异步存储到状态存储模块中该用户ID所对应的键值对中。步骤12,客户端登录上线,向推送服务发起接口请求;步骤13,长连接通讯模块收到客户端请求,建立并维持与客户端的长连接,同时向状态存储模块写入用户的状态等信息。步骤14,长连接通讯模块一直维持并询问状态存储模块是否有最新消息推送给该用户,若没有最新消息,执行步骤15,若有新消息,执行步骤16。步骤15,长连接通讯模块则会维持与客户端的长连接,不进行数据交互,同时也会与状态存储模块保持询问状态。步骤16,从状态存储模块中取出需要推送的结构化消息数据,返回给客户端,然后继续维持与客户端和状态存储模块的链接状态。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,例如模块名称的改变或替换,均包含在本发明的保护范围内。
权利要求
1.一种消息推送服务的实现方法,其特征在于,包括步骤1,推送消息队列接收模块将需要推送的消息存储到消息队列中;步骤2,推送逻辑处理模块轮询所述消息队列并将消息存储到状态存储模块中用户所对应的Key-Value键值对中;步骤3,用户登录客户端后,客户端向长连接通讯模块发起推送服务请求;步骤4,长连接通讯模块建立并维持与客户端的长连接,并向状态存储模块写入用户的状态;步骤5,长连接通讯模块询问状态存储模块是否有消息推送给用户,如果是,长连接通讯模块则从状态存储模块中取出需要推送的消息发送至客户端,并维持与客户端和状态存储模块的连接状态;否则,长连接通讯模块维持与客户端的长连接。
2.如权利要求1所述的消息推送服务的实现方法,其特征在于,步骤1中,推送消息队列接收模块将需要推送的消息随机存储到消息队列中。
3.如权利要求1所述的消息推送服务的实现方法,其特征在于,步骤2中,推送逻辑处理模块按照消息存储到消息队列中的顺序读取消息;推送逻辑处理模块根据消息队列的状态调整线程资源。
4.如权利要求1所述的消息推送服务的实现方法,其特征在于,步骤2中,状态存储模块以用户的标识符为键值,键值由长连接通讯模块写入;键值对应的值为需要推送的消息, 该消息由推送逻辑处理模块写入。
5.如权利要求1所述的消息推送服务的实现方法,其特征在于,步骤3中,长连接通讯模块采用HTTP协议。
6.一种消息推送服务的实现系统,其特征在于,包括推送消息队列接收模块,用于将需要推送的消息存储到消息队列中;推送逻辑处理模块,用于轮询所述队列并将消息存储到状态存储模块中用户所对应的 Key-Value键值对中;长连接通讯模块,用于在用户登录客户端后,接收客户端向长连接通讯模块发起推送服务请求;建立并维持与客户端的长连接,并向状态存储模块写入用户的状态;询问状态存储模块是否有消息推送给用户;有消息需要推送给用户时,从状态存储模块中取出需要推送的消息发送至客户端,并维持与客户端和状态存储模块的连接状态;没有消息需要推送给用户时,维持与客户端的长连接。
7.如权利要求6所述的消息推送服务的实现系统,其特征在于,推送消息队列接收模块,用于将需要推送的数据随机存储到消息队列中。
8.如权利要求6所述的消息推送服务的实现系统,其特征在于,推送逻辑处理模块,用于按照消息存储到消息队列中的顺序读取消息;推送逻辑处理模块,用于根据消息队列的状态调整线程资源。
9.如权利要求6所述的消息推送服务的实现系统,其特征在于,状态存储模块包括键值对,键值对以用户的标识符为键值,键值由长连接通讯模块写入;键值对应的值为需要推送的消息,该消息由推送逻辑处理模块写入。
10.如权利要求6所述的消息推送服务的实现系统,其特征在于,长连接通讯模块采用 HTTP协议。
全文摘要
本发明公开一种消息推送服务的实现方法与系统。该实现方法包括步骤1,推送消息队列接收模块将需要推送的消息存储到队列中;步骤2,推送逻辑处理模块轮询队列并将消息存储到状态存储模块中用户所对应的Key-Value键值对中;步骤3,用户登录后,客户端向长连接通讯模块发起推送服务请求;步骤4,长连接通讯模块建立并维持与客户端的长连接,并向状态存储模块写入用户的状态;步骤5,长连接通讯模块询问状态存储模块是否有消息推送给用户,若是,从状态存储模块中取出消息发送至客户端,并维持与客户端和状态存储模块的连接状态;否则,维持与客户端的长连接。本发明将客户端轮询请求转变为客户端与服务端进行网络通讯的长连接,提高了系统的可用性。
文档编号H04L29/08GK102523177SQ201110427869
公开日2012年6月27日 申请日期2011年12月19日 优先权日2011年12月19日
发明者康光磊 申请人:北京新媒传信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1