消息轮询方法和服务器、通信系统与流程

文档序号:11843345阅读:479来源:国知局
消息轮询方法和服务器、通信系统与流程

本发明涉及通信技术领域,尤其是一种消息轮询方法和服务器、通信系统。



背景技术:

随着3G和Wifi技术的普及,以及长期演进(Long Time Evolution,LTE)的发展,终端设备侧的带宽越来越大,用户的流量也逐渐增多。对于互联网的需求已经不局限于浏览网页、查看新闻,而是提出多样化的需求,例如网络游戏、视频电话等,因此,越来越多的应用和业务需要应用服务器直接把消息推送到终端设备上的应用客户端,从而极大的丰富了人们的生活,使人们获取更好的用户体验。

在应用服务器和终端设备之间的消息传递,通常包括拉取(Pull)和推送(Push)两种。其中,Pull是终端设备上的应用客户端到应用服务器去获取消息;而Push是应用服务器主动发送消息到终端设备上的应用客户端,具备主动性与时效性。

目前,消息推送服务使用的方式是在应用客户端与应用服务器之间保持长连接,即:就是在客户端与服务端之间创建和保持稳定可靠的连接;应用服务器产生新消息时,由应用服务器向应用客户端推送消息,该方式能够保证消息推送的及时性及应用客户端高并发性。

然而,在实现本发明的过程中,发明人发现,目前消息推送服务使用的方式至少存在以下问题:

目前应用客户端规模较大,其中有相当数量的应用客户端不能使用长连接,则该部分不能使用长连接的客户端便无法接收到应用服务器推送的新消息,从而限定了互联网应用和业务的发展。



技术实现要素:

本发明实施例所要解决的其中一个技术问题是,提供一种消息轮询方法和服务器、通信系统,以解决现有技术中不能使用长连接的客户端便无法接收到应用服务器推送的新消息的问题。

根据本发明实施例的一个方面,提供的一种消息轮询方法,包括:

接收客户端发送的消息获取请求,该消息获取请求中包括请求推送时间和已接收消息列表;所述请求推送时间为客户端上一次接收到服务器下发的上一响应消息中的第一推送时间,所述已接收消息列表包括客户端上一次接收到服务器下发的所有消息的消息标识ID;

根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向客户端发送过的新消息,并向客户端反馈响应消息,该响应消息中包括第二推送时间和新消息列表,所述新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,所述第二推送时间为所述新消息的推送时间。

在基于上述方法的另一个实施例中,所述从消息队列中获取未向客户端发送过的新消息包括:

根据消息获取请求中的请求推送时间和所述客户端发送的、所述请求推送时间对应的已接收消息列表,查询消息队列中是否存在推送时间为所述请求推送时间的、未向客户端发送过的新消息;

若存在,从消息队列中获取推送时间为所述请求推送时间的、未向客户端发送过的新消息作为本次向客户端下发的新消息;所述第二推送时间具体为所述第一推送时间;

否则,若不存在,按照推送时间的先后顺序,从消息队列中获取推送时间晚于所述请求推送时间的新消息作为本次向客户端下发的新消息。

在基于上述方法的另一个实施例中,所述从消息队列中获取推送时间为所述请求推送时间的、未向客户端发送过的新消息作为本次向客户端下发的新消息包括:

以预设单次消息发送数量为单位,从消息队列中获取推送时间为所述请求推送时间的、未向客户端发送过的新消息中,获取不大于所述预设单次消息发送数量的新消息作为本次向客户端下发的新消息。

在基于上述方法的另一个实施例中,所述从消息队列中获取推送时间晚于所述请求推送时间的新消息作为本次向客户端下发的新消息包括:

以预设单次消息发送数量为单位,从消息队列中获取推送时间晚于所述请求推送时间、不大于所述预设单次消息发送数量的新消息作为本次向客户端下发的新消息。

在基于上述方法的另一个实施例中,所述从消息队列中获取未向客户端发送过的新消息还包括:

若消息队列中不存在推送时间晚于所述请求推送时间的新消息,向客户端反馈响应消息,该响应消息中包括所述第一推送时间和新消息列表,所述新消息列表为空。

在基于上述方法的另一个实施例中,还包括:

实时或周期性地从消息发布平台拉取该消息发布平台新生成的消息;

按照拉取时间顺序为拉取的消息分配推送时间,并将分配推送时间的消息插入所述消息队列。

在基于上述方法的另一个实施例中,为拉取的消息分配的推送时间具体为将该消息插入所述消息队列的时间。

在基于上述方法的另一个实施例中,所述将分配推送时间的消息插入所述消息队列包括:按照推送时间由大到小或者有小到大的顺序,将分配推送时间的消息插入所述消息队列。

根据本发明实施例的另一个方面,提供的一种消息轮询服务器,包括:

接收单元,用于接收客户端发送的消息获取请求,该消息获取请求中包括请求推送时间和已接收消息列表;所述请求推送时间为客户端上一次接收到服务器下发的上一响应消息中的第一推送时间,所述已接收消息列表包括客户端上一次接收到服务器下发的所有消息的消息标识ID;

第一存储单元,用于存储消息队列;

获取单元,用于根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向客户端发送过的新消息,该响应消息中包括第二推送时间和新消息列表,所述新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,所述第二推送时间为所述新消息的推送时间;

发送单元,用于向客户端反馈所述响应消息。

根据本发明实施例的又一个方面,提供的一种通信系统,包括客户端和上述任一实施例的消息轮询服务器;

所述客户端,用于向所述消息轮询服务器发送消息获取请求,并接收所述消息轮询服务器反馈的响应消息;

所述消息获取请求中包括请求推送时间和已接收消息列表;所述请求推送时间为客户端上一次接收到服务器下发的上一响应消息中的第一推送时间,所述已接收消息列表包括客户端上一次接收到服务器下发的所有消息的消息标识ID;

所述响应消息中包括第二推送时间和新消息列表,所述新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,所述第二推送时间为所述新消息的推送时间。

基于本发明上述实施例提供的消息轮询方法和服务器、通信系统,可以由客户端发送消息获取请求,根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向该客户端发送过的新消息,并向客户端反馈响应消息,该响应消息中包括第二推送时间和新消息列表,新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,第二推送时间为新消息的推送时间。本发明实施例提供了一种客户端从应用服务器获取新消息的新的技术方案,基于该技术方案,不能使用长连接的客户端也可以从应用服务器获得新消息,从而促进了互联网应用和业务的发展。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

构成说明书的一部分的附图描述了本发明的实施例,并且连同描述一起用于解释本发明的原理。

参照附图,根据下面的详细描述,可以更加清楚地理解本发明,其中:

图1为本发明消息轮询方法一个实施例的流程图。

图2为本发明消息轮询方法另一个实施例的流程图。

图3为本发明消息轮询方法又一个实施例的流程图。

图4为本发明消息轮询服务器一个实施例的结构示意图。

图5为本发明消息轮询服务器另一个实施例的结构示意图。

图6为本发明通信系统一个实施例的结构示意图。

具体实施方式

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

图1为本发明消息轮询方法一个实施例的流程图。如图1所示,该实施例的消息轮询方法包括:

102,接收客户端发送的消息获取请求,该消息获取请求中包括请求推送时间和已接收消息列表。

其中,请求推送时间为客户端上一次接收到服务器下发的上一响应消息中的第一推送时间,已接收消息列表包括客户端上一次接收到服务器下发的所有消息的消息标识(ID),其中的消息ID唯一标识一条消息。

示例性地,在客户端首次发送的获取请求中,请求推送时间为预设的非时间数值,例如为0;已接收消息列表为空。

104,根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向客户端发送过的新消息,并向客户端反馈响应消息,该响应消息中包括第二推送时间和新消息列表。

其中,新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,第二推送时间为新消息的推送时间。

可选地,客户端接收到响应消息时,若新消息列表中存在新消息,可以根据新消息列表中的新消息执行相应操作。

基于本发明上述实施例提供的消息轮询的方法,可以由客户端发送消息获取请求,根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向该客户端发送过的新消息,并向客户端反馈响应消息,该响应消息中包括第二推送时间和新消息列表,新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,第二推送时间为新消息的推送时间。本发明实施例提供了一种客户端从应用服务器获取新消息的新的技术方案,基于该技术方案,不能使用长连接的客户端也可以从应用服务器获得新消息,从而促进了互联网应用和业务的发展。

图2为本发明消息轮询方法另一个实施例的流程图。如图2所示,该实施例的消息轮询方法包括:

202,接收客户端发送的消息获取请求,该消息获取请求中包括请求推送时间和已接收消息列表。

其中,请求推送时间为客户端上一次接收到服务器下发的上一响应消息中的第一推送时间,已接收消息列表包括客户端上一次接收到服务器下发的所有消息的消息标识(ID),其中的消息ID唯一标识一条消息。

204,根据消息获取请求中的请求推送时间和客户端发送的、请求推送时间对应的已接收消息列表,查询消息队列中是否存在推送时间为该请求推送时间的、未向客户端发送过的新消息。

若存在,执行操作206。否则,若不存在,执行操作208。

206,从消息队列中获取推送时间为请求推送时间的、未向客户端发送过的新消息作为本次向客户端下发的新消息。

之后,执行操作210。

208,按照推送时间的先后顺序,从消息队列中获取推送时间晚于请求推送时间的新消息作为本次向客户端下发的新消息。

210,向客户端反馈响应消息,该响应消息中包括第二推送时间和新消息列表。

其中,新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,第二推送时间为新消息的推送时间。

其中,在操作206中,第二推送时间具体为第一推送时间。

在实际应用中,基于负载均衡、消息发送成功率和发送效率,可以限制每次向给客户端发送的新消息数量。具体地,可以预先设置预设单次消息发送数量,例如100条。则在本发明另一实施例的消息轮询方法中,图2所示实施例的操作206中,具体以预设单次消息发送数量为单位,从消息队列中获取推送时间为请求推送时间的、未向客户端发送过的新消息中,获取不大于预设单次消息发送数量的新消息作为本次向客户端下发的新消息。即:若消息队列中推送时间为请求推送时间的、未向客户端发送过的新消息数量大于或等于100条,则从消息队列中获取推送时间为请求推送时间的、未向客户端发送过的100条新消息作为本次向客户端下发的新消息;若消息队列中推送时间为请求推送时间的、未向客户端发送过的新消息数量小于100条,则从消息队列中获取推送时间为请求推送时间的、未向客户端发送过的全部新消息作为本次向客户端下发的新消息。

同样地,图2所示实施例的操作208中,具体以预设单次消息发送数量为单位,从消息队列中获取推送时间晚于请求推送时间、不大于预设单次消息发送数量的新消息作为本次向客户端下发的新消息。即:若消息队列中推送时间为晚于请求推送时间、且最接近请求推送时间的一个推送时间的新消息数量大于或等于100条,则从该新消息中获取100条作为本次向客户端下发的新消息;若消息队列中推送时间为晚于请求推送时间、最接近请求推送时间的一个推送时间的新消息数量小于100条,则获取推送时间为晚于请求推送时间、且最接近请求推送时间的一个推送时间的所有新消息作为本次向客户端下发的新消息。

在本发明又一实施例的消息轮询方法中,从消息队列中获取未向客户端发送过的新消息时,还可以包括:

若消息队列中不存在推送时间晚于请求推送时间的新消息,向客户端反馈响应消息,该响应消息中包括第一推送时间和新消息列表,其中的新消息列表为空。

进一步地,在本发明上述各消息轮询方法实施例的流程之前,还可以包括:

实时或周期性地从消息发布平台拉取该消息发布平台新生成的消息;

按照拉取时间顺序为拉取的消息分配推送时间,并将分配推送时间的消息插入消息队列,以便推送给客户端。

具体地,为拉取的消息分配的推送时间具体可以是将该消息插入消息队列的时间。

为了节省存储资源,可以定期对该消息列队中推送时间较早的消息进行清理。

示例性地,将分配推送时间的消息插入消息队列例如可以是:按照推送时间由大到小或者有小到大的顺序,将分配推送时间的消息插入消息队列。

则在本发明上述实施例中,还包括:

比较消息队列的尾部或头部是否存在推送时间大于第一推送时间的消息;

若消息队列的尾部或头部存在推送时间大于第一推送时间的消息,则确定消息队列中存在推送时间晚于请求推送时间的新消息;

相应地,按照推送时间的先后顺序,从消息队列中获取推送时间晚于请求推送时间的新消息作为本次向客户端下发的新消息具体为:从消息队列的尾部或头部获取推送时间大于第一推送时间的消息作为本次向客户端下发的新消息;

否则,若消息队列的尾部或头部不存在推送时间大于第一推送时间的消息,则确定消息队列中不存在推送时间晚于请求推送时间的新消息。

在本发明消息轮询方法的又一个实施例中,客户端发送的消息获取请求中还可以包括用于唯一标识一个客户端的客户端ID。相应地,该实施例的消息轮询方法还包括:

接收到客户端首次发送的获取请求后,在消息推送信息列表中建立客户端ID、推送时间与已接收消息列表之间的对应关系;

并在每次接收到客户端发送的消息获取请求后,基于接收到的消息获取请求对消息推送信息列表进行更新;

则上述各实施例中,根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向客户端发送过的新消息包括:根据消息获取请求中的请求推送时间、已接收消息列表和客户端ID,查询消息推送信息列表,从消息队列中获取未向客户端发送过的新消息。

进一步地,在本发明消息轮询方法的再一个实施例中,可以预先根据消息轮询服务器的负载和/或消息队列中新消息的数量设置轮询周期。相应地,在发送给客户端的响应消息中还可以包括轮询周期。相应地,各实施例的消息轮询方法还包括:

客户端接收到响应消息后,以轮询周期作为计时时长开始计时,并在计时器超时时,生成消息获取请求并发送消息轮询服务器。

根据消息轮询服务器的负载和/或消息队列中新消息的数量设置轮询周期的具体方式,可以是:消息轮询服务器的负载越大,轮询周期越大;消息队列中新消息的数量越大,轮询周期越小。

具体地,根据消息队列中新消息的数量设置轮询周期的方式可以是:在消息队列中存在新消息时,将轮询周期设置为预设周期;在消息队列中不存在新消息时,根据连续多次查询消息队列中不存在新消息的次数的增加,按照预设方式逐渐增大轮询周期。

因为每天的新消息都是有限的,因此,如果有新消息,也会在几轮请求、响应中推送完毕,因此大部分时间,客户端的轮询都是空轮询,没有新消息。本发明实施例根据消息轮询服务器的负载和/或消息队列中新消息的数量更新轮询周期,在服务端负载较大时,增大轮询周期,可以满足更多的客户端接入服务器;在消息队列中新消息的数量少时,增大轮询周期,既可以满足消息推送需求,还可以避免没有新消息时客户方与服务器进行信息交互,避免了由此导致的客户端与服务器负载的增加、对客户端与服务器工作性能的影响和占用的无线通信资源;而在服务端负载较小、消息队列中新消息的数量较多时,采用较小的轮询周期,可以在不影响服务器工作性能的情况下,将新消息快速推送给客户端。

图3为本发明消息轮询方法又一个实施例的流程图。该实施例以一个具体应用实例为例,对本发明各实施例的消息轮询方法进行进一步说明,该实施例的流程具体可以通过一个消息轮询服务器或具有类似功能的装置实现。如图3所示,该实施例的消息轮询方法包括:

302,客户端首次发送获取请求,其中包括:客户端ID,请求推送时间为0(即:pre_push_time=0),已接收消息列表为空(即:recv_id_set=null)。

304,消息轮询服务器在消息推送信息列表中建立客户端ID、推送时间与已接收消息列表之间的对应关系,并查询消息队列中是否存在新消息。

若不存在,执行操作306。若存在,执行操作310。

306,消息轮询服务器向客户端反馈响应消息,该响应消息中包括:推送时间为空(即:push_time=null)、新消息列表为空(即:msg_set=null)和预先设置的轮询周期T。

308,客户端接收到响应消息后,设置轮询周期T,并以该轮询周期T作为计时时长开始计时,在计时器超时时,生成消息获取请求并发送给消息轮询服务器。

消息获取请求中,请求推送时间为0(即:pre_push_time=0),已接收消息列表为空(即:recv_id_set=null)。

之后,执行操作304。

310,消息轮询服务器识别消息队列中推送时间push_time最早的(假设:推送时间最早的push_time=m)的新消息数量是否小于预设单次消息发送数量。

若小于预设单次消息发送数量,执行操作312。否则,若大于或等于预设单次消息发送数量,执行操作314。

312,消息轮询服务器从消息队列中获取推送时间push_time=m的所有新消息作为本次向客户端下发的新消息,即:新消息列表中包括推送时间push_time=m的所有新消息的消息ID。

之后执行操作316。

314,消息轮询服务器从消息队列中获取推送时间为push_time=m、预设单次消息发送数量的新消息作为本次向客户端下发的新消息,即:新消息列表中包括本次获取的推送时间push_time=m、预设单次消息发送数量的新消息的消息ID。

316,消息轮询服务器向客户端反馈响应消息,该响应消息中包括推送时间push_time=m、新消息列表msg_set={…}和轮询周期T。

其中,消息轮询服务器向一个客户端首次反馈响应消息中轮询周期T的取值为预先设置的值,之后向一个客户端首次反馈响应消息中轮询周期T的取值为消息轮询服务器按照预设策略更新或不更新的值,例如,消息队列中有新消息时轮询周期T的取值继续采用预先设置的值,向该客户端的新消息推送完成后轮询周期T的取值采用一个被更新的较大值。

318,客户端接收到响应消息后,接收新消息列表中的新消息,生成已接收消息列表recv_id_set={…},并基于各新消息执行相应操作,例如向客户端所在的移动终端弹出消息提示、安装相应的插件等,同时以该轮询周期T作为计时时长开始计时。

320,在计时器超时时,客户端生成消息获取请求并发送给消息轮询服务器,该消息获取请求中包括:客户端ID,请求推送时间pre_push_time=m,已接收消息列表recv_id_set={…}。

322,消息轮询服务器将推送时间push_time=m和已接收消息列表recv_id_set={…}更新到推送信息列表中该客户端ID的对应关系中,并根据该客户端ID的对应关系,查询消息队列中是否存在推送时间为pre_push_time=m、未向客户端发送过的新消息。

若存在,执行操作324。否则,若不存在,执行操作330。

324,消息轮询服务器识别推送时间为push_time=m、未向客户端发送过的新消息数量是否小于预设单次消息发送数量。

若小于预设单次消息发送数量,执行操作326。否则,若大于或等于预设单次消息发送数量,执行操作328。

326,消息轮询服务器根据推送信息列表中该客户端ID的对应关系,从消息队列中获取推送时间为push_time=m、未向客户端发送过的全部新消息作为本次向客户端下发的新消息。

之后,执行操作316。

328,消息轮询服务器根据推送信息列表中该客户端ID的对应关系,从消息队列中推送时间为push_time=m、未向客户端发送过的新消息中获取预设单次消息发送数量的新消息作为本次向客户端下发的新消息。

之后,执行操作316。

330,消息轮询服务器按照推送时间的先后顺序,查询消息队列中是否存在推送时间晚于push_time=m的新消息。

若存在,假设推送时间晚于push_time=m且最接近push_time=m的push_time=n,则以push_time=n代替push_time=m作为推送时间,开始执行操作310。否则,若不存在,按照预设规律增大轮询周期T的值,然后执行操作316,此时,响应消息中中,新消息列表为空,即:msg_set=null,轮询周期T的取值大于预先设置的值。

在图3所示的上述实施例中,在消息队列中不存在新消息时,统计连续多次查询消息队列中不存在新消息的次数,随着该连续多次查询消息队列中不存在新消息的次数的增加,按照预设方式逐渐增大轮询周期。直至消息队列中出现新消息时,轮询周期恢复预设设置的值,并对计数器清零,以便下次重新统计消息队列中连续不存在新消息的次数。

图4为本发明消息轮询服务器一个实施例的结构示意图。该实施例的消息轮询服务器可用于实现本发明上述各实施例的消息轮询方法。如图4所示,该实施例的消息轮询服务器包括:接收单元,第一存储单元,获取单元和发送单元。其中:

接收单元,用于接收客户端发送的消息获取请求,该消息获取请求中包括请求推送时间和已接收消息列表;请求推送时间为客户端上一次接收到服务器下发的上一响应消息中的第一推送时间,已接收消息列表包括客户端上一次接收到服务器下发的所有消息的消息ID。

示例性地,在客户端首次发送的获取请求中,请求推送时间为预设的非时间数值,例如为0;已接收消息列表为空。

第一存储单元,用于存储消息队列。

获取单元,用于根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向客户端发送过的新消息,该响应消息中包括第二推送时间和新消息列表,新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,第二推送时间为新消息的推送时间。

发送单元,用于向客户端反馈响应消息。

基于本发明上述实施例提供的消息轮询服务器,可以由客户端发送消息获取请求,根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向该客户端发送过的新消息,并向客户端反馈响应消息,该响应消息中包括第二推送时间和新消息列表,新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,第二推送时间为新消息的推送时间。本发明实施例提供了一种客户端从应用服务器获取新消息的新的技术方案,基于该技术方案,不能使用长连接的客户端也可以从应用服务器获得新消息,从而促进了互联网应用和业务的发展。

在上述消息轮询服务器实施例的一个具体示例中,获取单元从消息队列中获取未向客户端发送过的新消息时,具体用于:

根据消息获取请求中的请求推送时间和客户端发送的、请求推送时间对应的已接收消息列表,查询消息队列中是否存在推送时间为请求推送时间的、未向客户端发送过的新消息;

若存在,从消息队列中获取推送时间为请求推送时间的、未向客户端发送过的新消息作为本次向客户端下发的新消息,此时的第二推送时间具体为第一推送时间。具体地,获取单元以预设单次消息发送数量为单位,从消息队列中获取推送时间为请求推送时间的、未向客户端发送过的新消息中,获取不大于预设单次消息发送数量的新消息作为本次向客户端下发的新消息;

否则,若不存在,按照推送时间的先后顺序,从消息队列中获取推送时间晚于请求推送时间的新消息作为本次向客户端下发的新消息。具体地,获取单元可以以预设单次消息发送数量为单位,从消息队列中获取推送时间晚于请求推送时间、不大于预设单次消息发送数量的新消息作为本次向客户端下发的新消息。

进一步地,获取单元从消息队列中获取未向客户端发送过的新消息时,还用于在消息队列中不存在推送时间晚于请求推送时间的新消息时,向客户端反馈响应消息,该响应消息中包括第一推送时间和新消息列表,新消息列表为空。

图5为本发明消息轮询服务器另一个实施例的结构示意图。如图5所示,与图4所示的实施例相比,该实施例的消息轮询服务器还包括消息拉取单元,用于实时或周期性地从消息发布平台拉取该消息发布平台新生成的消息,并按照拉取时间顺序为拉取的消息分配推送时间,并将分配推送时间的消息插入消息队列。

具体地,为拉取的消息分配的推送时间可以是将该消息插入消息队列的时间。

在本发明消息轮询服务器实施例的一个具体示例中,消息拉取单元将分配推送时间的消息插入消息队列时,具体用于按照推送时间由大到小或者有小到大的顺序,将分配推送时间的消息插入消息队列。

相应地,在本发明消息轮询服务器的又一个实施例中,获取单元还用于:

比较消息队列的尾部或头部是否存在推送时间大于第一推送时间的消息;

若消息队列的尾部或头部存在推送时间大于第一推送时间的消息,则确定消息队列中存在推送时间晚于请求推送时间的新消息;

按照推送时间的先后顺序,从消息队列中获取推送时间晚于请求推送时间的新消息作为本次向客户端下发的新消息时,具体用于从消息队列的尾部或头部获取推送时间大于第一推送时间的消息作为本次向客户端下发的新消息;

否则,若消息队列的尾部或头部不存在推送时间大于第一推送时间的消息,则确定消息队列中不存在推送时间晚于请求推送时间的新消息。

进一步地,消息获取请求中还包括用于唯一标识一个客户端的客户端ID。相应地,在本发明消息轮询服务器的再一个实施例中,服务器还包括:推送信息存储单元和更新单元。其中:

推送信息存储单元,用于存储消息推送信息列表,消息推送信息列表包括客户端ID、推送时间与已接收消息列表之间的对应关系。

更新单元,用于在接收单元接收到客户端首次发送的获取请求后,在消息推送信息列表中建立客户端ID、推送时间与已接收消息列表之间的对应关系;并在每次接收到客户端发送的消息获取请求后,基于接收到的消息获取请求对消息推送信息列表进行更新;

相应地,获取单元根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向客户端发送过的新消息时,具体用于:根据消息获取请求中的请求推送时间、已接收消息列表和客户端ID,查询消息推送信息列表,从消息队列中获取未向客户端发送过的新消息。

进一步地,在本发明上述各实施例的消息轮询服务器中,响应消息中还可以包括轮询周期。

再参见图5,消息轮询服务器还可以包括设置单元,用于根据消息轮询服务器的负载和/或消息队列中新消息的数量设置轮询周期。具体地,可以设置消息轮询服务器的负载越大,轮询周期越大;和/或消息队列中新消息的数量越大,轮询周期越小。

在其中一个具体示例中,设置单元根据消息队列中新消息的数量设置轮询周期时,具体用于:在消息队列中存在新消息时,将轮询周期设置为预设周期;在消息队列中不存在新消息时,根据连续多次查询消息队列中不存在新消息的次数的增加,按照预设方式逐渐增大轮询周期。

图6为本发明通信系统一个实施例的结构示意图。如图6所示,该实施例的通信系统包括客户端本发明上述任一实施例的消息轮询服务器。其中:

客户端,用于向消息轮询服务器发送消息获取请求,并接收消息轮询服务器反馈的响应消息。

其中,消息获取请求中包括请求推送时间和已接收消息列表,请求推送时间为客户端上一次接收到服务器下发的上一响应消息中的第一推送时间,已接收消息列表包括客户端上一次接收到服务器下发的所有消息的消息ID。

响应消息中包括第二推送时间和新消息列表,新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,第二推送时间为新消息的推送时间。

基于本发明上述实施例提供的通信系统,可以由客户端发送消息获取请求,消息轮询服务器根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向该客户端发送过的新消息,并向客户端反馈响应消息,该响应消息中包括第二推送时间和新消息列表,新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,第二推送时间为新消息的推送时间。本发明实施例提供了一种客户端从应用服务器获取新消息的新的技术方案,基于该技术方案,不能使用长连接的客户端也可以从应用服务器获得新消息,从而促进了互联网应用和业务的发展。

另外,在通信系统的另一个实施例中,响应消息中包括轮询周期时,客户端还用于接收到响应消息后,以轮询周期开始计时,并在计时器超时时,生成消息获取请求并发送消息轮询服务器。

进一步地,在本发明上述各实施例的通信系统中,客户端还用于在接收到响应消息时,若新消息列表中存在新消息,根据新消息列表中的新消息执行相应操作。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

本发明实施例提供了以下技术方案:

1、一种消息轮询方法,包括:

接收客户端发送的消息获取请求,该消息获取请求中包括请求推送时间和已接收消息列表;所述请求推送时间为客户端上一次接收到服务器下发的上一响应消息中的第一推送时间,所述已接收消息列表包括客户端上一次接收到服务器下发的所有消息的消息标识ID;

根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向客户端发送过的新消息,并向客户端反馈响应消息,该响应消息中包括第二推送时间和新消息列表,所述新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,所述第二推送时间为所述新消息的推送时间。

2、根据1所述的方法,所述从消息队列中获取未向客户端发送过的新消息包括:

根据消息获取请求中的请求推送时间和所述客户端发送的、所述请求推送时间对应的已接收消息列表,查询消息队列中是否存在推送时间为所述请求推送时间的、未向客户端发送过的新消息;

若存在,从消息队列中获取推送时间为所述请求推送时间的、未向客户端发送过的新消息作为本次向客户端下发的新消息;所述第二推送时间具体为所述第一推送时间;

否则,若不存在,按照推送时间的先后顺序,从消息队列中获取推送时间晚于所述请求推送时间的新消息作为本次向客户端下发的新消息。

3、根据2所述的方法,所述从消息队列中获取推送时间为所述请求推送时间的、未向客户端发送过的新消息作为本次向客户端下发的新消息包括:

以预设单次消息发送数量为单位,从消息队列中获取推送时间为所述请求推送时间的、未向客户端发送过的新消息中,获取不大于所述预设单次消息发送数量的新消息作为本次向客户端下发的新消息。

4、根据2所述的方法,所述从消息队列中获取推送时间晚于所述请求推送时间的新消息作为本次向客户端下发的新消息包括:

以预设单次消息发送数量为单位,从消息队列中获取推送时间晚于所述请求推送时间、不大于所述预设单次消息发送数量的新消息作为本次向客户端下发的新消息。

5、根据2至4任意一项所述的方法,所述从消息队列中获取未向客户端发送过的新消息还包括:

若消息队列中不存在推送时间晚于所述请求推送时间的新消息,向客户端反馈响应消息,该响应消息中包括所述第一推送时间和新消息列表,所述新消息列表为空。

6、根据5所述的方法,还包括:

实时或周期性地从消息发布平台拉取该消息发布平台新生成的消息;

按照拉取时间顺序为拉取的消息分配推送时间,并将分配推送时间的消息插入所述消息队列。

7、根据6所述的方法,为拉取的消息分配的推送时间具体为将该消息插入所述消息队列的时间。

8、根据6或7所述的方法,所述将分配推送时间的消息插入所述消息队列包括:按照推送时间由大到小或者有小到大的顺序,将分配推送时间的消息插入所述消息队列。

9、根据8所述的方法,还包括:

比较所述消息队列的尾部或头部是否存在推送时间大于所述第一推送时间的消息;

若所述消息队列的尾部或头部存在推送时间大于所述第一推送时间的消息,则确定消息队列中存在推送时间晚于所述请求推送时间的新消息;

所述按照推送时间的先后顺序,从消息队列中获取推送时间晚于所述请求推送时间的新消息作为本次向客户端下发的新消息包括:从所述消息队列的尾部或头部获取推送时间大于所述第一推送时间的消息作为本次向客户端下发的新消息;

否则,若所述消息队列的尾部或头部不存在推送时间大于所述第一推送时间的消息,则确定消息队列中不存在推送时间晚于所述请求推送时间的新消息。

10、根据1至9任意一项所述的方法,客户端首次发送的获取请求中,所述请求推送时间为预设的非时间数值;所述已接收消息列表为空。

11、根据1至10任意一项所述的方法,所述消息获取请求中还包括用于唯一标识一个客户端的客户端ID;

所述方法还包括:

接收到客户端首次发送的获取请求后,在消息推送信息列表中建立客户端ID、推送时间与已接收消息列表之间的对应关系;

并在每次接收到客户端发送的消息获取请求后,基于接收到的消息获取请求对所述消息推送信息列表进行更新;

所述根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向客户端发送过的新消息包括:根据消息获取请求中的请求推送时间、已接收消息列表和客户端ID,查询所述消息推送信息列表,从消息队列中获取未向客户端发送过的新消息。

12、根据1至11任意一项所述的方法,所述响应消息中还包括轮询周期;

所述方法还包括:

客户端接收到响应消息后,以所述轮询周期开始计时,并在计时器超时时,生成所述消息获取请求并发送消息轮询服务器。

13、根据12所述的方法,还包括:

根据所述消息轮询服务器的负载和/或消息队列中新消息的数量设置轮询周期。

14、根据13所述的方法,所述消息轮询服务器的负载越大,所述轮询周期越大;

所述消息队列中新消息的数量越大,所述轮询周期越小。

15、根据14所述的方法,所述根据消息队列中新消息的数量设置轮询周期包括:

在消息队列中存在新消息时,将轮询周期设置为预设周期;

在消息队列中不存在新消息时,根据连续多次查询消息队列中不存在新消息的次数的增加,按照预设方式逐渐增大轮询周期。

16、根据1至15任意一项所述的方法,还包括:

客户端接收到响应消息时,若新消息列表中存在新消息,根据新消息列表中的新消息执行相应操作。

17、一种消息轮询服务器,包括:

接收单元,用于接收客户端发送的消息获取请求,该消息获取请求中包括请求推送时间和已接收消息列表;所述请求推送时间为客户端上一次接收到服务器下发的上一响应消息中的第一推送时间,所述已接收消息列表包括客户端上一次接收到服务器下发的所有消息的消息标识ID;

第一存储单元,用于存储消息队列;

获取单元,用于根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向客户端发送过的新消息,该响应消息中包括第二推送时间和新消息列表,所述新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,所述第二推送时间为所述新消息的推送时间;

发送单元,用于向客户端反馈所述响应消息。

18、根据17所述的服务器,所述获取单元从消息队列中获取未向客户端发送过的新消息时,具体用于:

根据消息获取请求中的请求推送时间和所述客户端发送的、所述请求推送时间对应的已接收消息列表,查询消息队列中是否存在推送时间为所述请求推送时间的、未向客户端发送过的新消息;

若存在,从消息队列中获取推送时间为所述请求推送时间的、未向客户端发送过的新消息作为本次向客户端下发的新消息;所述第二推送时间具体为所述第一推送时间;

否则,若不存在,按照推送时间的先后顺序,从消息队列中获取推送时间晚于所述请求推送时间的新消息作为本次向客户端下发的新消息。

19、根据18所述的服务器,所述获取单元从消息队列中获取推送时间为所述请求推送时间的、未向客户端发送过的新消息作为本次向客户端下发的新消息时,具体用于以预设单次消息发送数量为单位,从消息队列中获取推送时间为所述请求推送时间的、未向客户端发送过的新消息中,获取不大于所述预设单次消息发送数量的新消息作为本次向客户端下发的新消息。

20、根据18所述的服务器,所述获取单元从消息队列中获取推送时间晚于所述请求推送时间的新消息作为本次向客户端下发的新消息时,具体用于以预设单次消息发送数量为单位,从消息队列中获取推送时间晚于所述请求推送时间、不大于所述预设单次消息发送数量的新消息作为本次向客户端下发的新消息。

21、根据18至20任意一项所述的服务器,所述获取单元从消息队列中获取未向客户端发送过的新消息时,还用于若消息队列中不存在推送时间晚于所述请求推送时间的新消息,向客户端反馈响应消息,该响应消息中包括所述第一推送时间和新消息列表,所述新消息列表为空。

22、根据21所述的服务器,还包括:

消息拉取单元,用于实时或周期性地从消息发布平台拉取该消息发布平台新生成的消息,并按照拉取时间顺序为拉取的消息分配推送时间,并将分配推送时间的消息插入所述消息队列。

23、根据22所述的服务器,为拉取的消息分配的推送时间具体为将该消息插入所述消息队列的时间。

24、根据22或23所述的服务器,所述消息拉取单元将分配推送时间的消息插入所述消息队列时,具体用于按照推送时间由大到小或者有小到大的顺序,将分配推送时间的消息插入所述消息队列。

25、根据24所述的服务器,所述获取单元,还用于:

比较所述消息队列的尾部或头部是否存在推送时间大于所述第一推送时间的消息;

若所述消息队列的尾部或头部存在推送时间大于所述第一推送时间的消息,则确定消息队列中存在推送时间晚于所述请求推送时间的新消息;

按照推送时间的先后顺序,从消息队列中获取推送时间晚于所述请求推送时间的新消息作为本次向客户端下发的新消息时,具体用于从所述消息队列的尾部或头部获取推送时间大于所述第一推送时间的消息作为本次向客户端下发的新消息;

否则,若所述消息队列的尾部或头部不存在推送时间大于所述第一推送时间的消息,则确定消息队列中不存在推送时间晚于所述请求推送时间的新消息。

26、根据17至25任意一项所述的服务器,客户端首次发送的获取请求中,所述请求推送时间为预设的非时间数值;所述已接收消息列表为空。

27、根据17至25任意一项所述的服务器,所述消息获取请求中还包括用于唯一标识一个客户端的客户端ID;

所述服务器还包括:

推送信息存储单元,用于存储消息推送信息列表,所述消息推送信息列表包括客户端ID、推送时间与已接收消息列表之间的对应关系;

更新单元,用于在接收单元接收到客户端首次发送的获取请求后,在消息推送信息列表中建立客户端ID、推送时间与已接收消息列表之间的对应关系;并在每次接收到客户端发送的消息获取请求后,基于接收到的消息获取请求对所述消息推送信息列表进行更新;

所述获取单元根据消息获取请求中的请求推送时间和已接收消息列表,从消息队列中获取未向客户端发送过的新消息时,具体用于:根据消息获取请求中的请求推送时间、已接收消息列表和客户端ID,查询所述消息推送信息列表,从消息队列中获取未向客户端发送过的新消息。

28、根据17至27任意一项所述的服务器,所述响应消息中还包括轮询周期。

29、根据28所述的服务器,还包括:

设置单元,用于根据所述消息轮询服务器的负载和/或消息队列中新消息的数量设置轮询周期。

30、根据29所述的服务器,所述消息轮询服务器的负载越大,所述轮询周期越大;

所述消息队列中新消息的数量越大,所述轮询周期越小。

31、根据30所述的服务器,所述设置单元根据消息队列中新消息的数量设置轮询周期时,具体用于:

在消息队列中存在新消息时,将轮询周期设置为预设周期;

在消息队列中不存在新消息时,根据连续多次查询消息队列中不存在新消息的次数的增加,按照预设方式逐渐增大轮询周期。

32、一种通信系统,包括客户端和1至16任意一项所述的消息轮询服务器;

所述客户端,用于向所述消息轮询服务器发送消息获取请求,并接收所述消息轮询服务器反馈的响应消息;

所述消息获取请求中包括请求推送时间和已接收消息列表;所述请求推送时间为客户端上一次接收到服务器下发的上一响应消息中的第一推送时间,所述已接收消息列表包括客户端上一次接收到服务器下发的所有消息的消息标识ID;

所述响应消息中包括第二推送时间和新消息列表,所述新消息列表中包括本次向客户端下发的所有新消息的消息ID和消息内容,所述第二推送时间为所述新消息的推送时间。

33、根据32所述的系统,所述响应消息中包括轮询周期时,所述客户端,还用于接收到响应消息后,以所述轮询周期开始计时,并在计时器超时时,生成所述消息获取请求并发送消息轮询服务器。

34、根据32或33所述的系统,所述客户端,还用于在接收到响应消息时,若新消息列表中存在新消息,根据新消息列表中的新消息执行相应操作。

本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

可能以许多方式来实现本发明的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。

本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1