发明内容
本公开实施例至少提供一种直播间消息拉取的方法、装置、计算机设备和存储介质,提高拉取直播间消息的可靠度。
第一方面,本公开实施例提供了一种直播间消息拉取的方法,该方法包括:
接收用户端发起的针对目标直播间的消息拉取请求;所述消息拉取请求中包括与所述用户端对应的用户标识,以及最近一次获取的历史消息的历史消息存储标识;
从与所述目标直播间对应的消息列表中,获取与所述用户标识对应的目标消息列表;所述消息列表中包括各条消息分别对应的存储标识,所述存储标识包括消息写入所述消息列表时的时间戳和消息序号;
基于所述历史消息存储标识,以及所述目标消息列表中的所述各条消息分别对应的存储标识,确定待拉取消息,并发送给所述用户端。
在一种实施方式中,还包括:
获取生成的所述目标直播间的待写入消息;
为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表。
在一种实施方式中,所述存储标识的高32位用于表示所述时间戳,所述存储标识的低32位用于表示所述消息序号。
在一种实施方式中,基于所述历史消息存储标识,以及所述目标消息列表中的所述各条消息分别对应的存储标识,确定所述待拉取消息,包括:
从所述目标消息列表中,获取最新消息的存储标识;所述最新消息为最近一次写入所述目标消息列表中的消息;
若所述历史消息存储标识指示的时间戳小于所述最新消息的时间戳,且所述历史消息存储标识指示的消息序号小于所述最新消息的消息序号,则基于所述历史消息存储标识,从所述目标消息列表中,确定所述待拉取消息。
在一种实施方式中,所述方法还包括:
若所述历史消息存储标识指示的时间戳大于或者等于所述最新消息的时间戳,和/或所述历史消息存储标识指示的消息序号大于或者等于所述最新消息的消息序号,则向所述用户端反馈用于指示没有可推送消息的指示信息。
在一种实施方式中,还包括:
获取最近一次发送给用户端的待拉取消息的目标存储标识;
若所述历史消息存储标识与所述目标存储标识不匹配,则生成异常提示信息;所述异常提示信息用于提示用户端出现异常或者消息存储系统出现异常。
第二方面,本公开实施例提供了一种直播间消息拉取的方法,包括:
获取生成的所述目标直播间的待写入消息;
为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表。
在一种实施方式中,所述消息列表包括普通消息列表和点对点消息列表,所述为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表,包括:
若所述待写入消息为普通消息,为所述普通消息生成第一消息序号,并将所述普通消息、所述第一消息序号和当前时间对应的第一时间戳对应写入到所述普通消息列表中。
若所述待写入消息为点对点消息,为所述点对点消息生成第二消息序号,并将所述点对点消息、所述第二消息序号和当前时间对应的第二时间戳对应写入到每个用户对应的点对点消息列表中。
第三方面,本公开实施例提供了一种直播间消息拉取的装置,该装置包括:
接收模块,用于接收用户端发起的针对目标直播间的消息拉取请求;所述消息拉取请求中包括与所述用户端对应的用户标识,以及最近一次获取的历史消息的历史消息存储标识;
获取模块,用于从与所述目标直播间对应的消息列表中,获取与所述用户标识对应的目标消息列表;所述消息列表中包括各条消息分别对应的存储标识,所述存储标识包括消息写入所述消息列表时的时间戳和消息序号;
确定模块,用于基于所述历史消息存储标识,以及所述目标消息列表中的所述各条消息分别对应的存储标识,确定待拉取消息,并发送给所述用户端。
第四方面,本公开实施例提供了一种直播间消息拉取的装置,所述装置包括:
获取模块,用于获取生成的所述目标直播间的待写入消息;
处理模块,用于为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表。
第五方面,本公开实施例提供了一种计算机设备,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行第一方面任一所述方法的步骤,或执行如第二方面所述方法的步骤。
第六方面,本公开实施例提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如第一方面任一所述方法的步骤,或执行如第二方面所述方法的步骤。
本公开实施例提供了一种直播间消息拉取的方法,接收用户端发起的针对目标直播间的消息拉取请求时,获取消息拉取请求中携带的用户标识对应的目标消息列表,基于消息拉取请求中的历史消息存储标识,以及目标消息列表中的各条消息分别对应的存储标识,确定待拉取消息,其中,与目标直播间对应的消息列表中存储有各条消息分别对应的存储标识,存储标识包括消息写入消息列表时的时间戳和消息序号,这样,在确定为用户端推送的消息时,综合考虑消息列表中消息的时间戳和消息序号,避免用户端拉取到重复的消息,提高了消息拉取的可靠度,同时,避免了资源浪费,提高了直播平台的服务质量。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
直播间的普通消息和点对点消息一般存储在循环消息列表中,比如,普通消息存储在普通消息列表中,点对点消息存储点对点消息列表中,在循环消息列表写满后,会重新从循环消息列表的开始位置写入消息,且在循环消息列表中写消息时,仅会写入消息内容和消息标识,并不会为消息设置序号,也不会写入消息的时间戳。因此,在直播开始后,无法统计已写入消息列表的消息的数目,在消息发生丢失和重复时,无法定位导致的原因。
基于上述研究,本公开实施例提供了一种直播间消息拉取的方法,接收用户端发起的针对目标直播间的消息拉取请求时,获取消息拉取请求中携带的用户标识对应的目标消息列表,基于消息拉取请求中的历史消息存储标识,以及目标消息列表中的各条消息分别对应的存储标识,确定待拉取消息,其中,与目标直播间对应的消息列表中存储有各条消息分别对应的存储标识,存储标识包括消息写入消息列表时的时间戳和消息序号,这样,在确定为用户端推送的消息时,综合考虑消息列表中消息的时间戳和消息序号,避免用户端拉取到重复的消息,提高了消息拉取的可靠度,同时,避免了资源浪费,提高了直播平台的服务质量。
需要说明的是,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种直播间消息拉取的方法进行详细介绍,本公开实施例所提供的直播间消息拉取的方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、蜂窝电话、无绳电话、个人数字处理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该直播间消息拉取的方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的直播间消息拉取的方法的流程图,可以包括以下步骤:
S101,接收用户端发起的针对目标直播间的消息拉取请求;所述消息拉取请求中包括与所述用户端对应的用户标识,以及最近一次获取的历史消息的历史消息存储标识。
S102,从与所述目标直播间对应的消息列表中,获取与所述用户标识对应的目标消息列表;所述消息列表中包括各条消息分别对应的存储标识,所述存储标识包括消息写入所述消息列表时的时间戳和消息序号;
S103,基于所述历史消息存储标识,以及所述目标消息列表中的所述各条消息分别对应的存储标识,确定待拉取消息,并发送给所述用户端。
本公开实施例提供了直播间消息拉取的方法应用于直播间场景中,直播间可以为但不限于电商直播间、主播PK直播间、游戏直播间、授课直播间等。
在S101中,用户端为参与直播间直播的用户的终端设备;目标直播间可以为电商直播间、主播PK直播间、游戏直播间中的任一种直播间;消息拉取请求可以为周期性发起的,例如,每隔3秒发起一次消息拉取请求;消息拉取请求中除了包括用户标识和消息的存储标识外,还包括目标直播间的直播间标识,存储标识用于标识消息的时间戳和序号,直播间标识、用户标识可以根据实际场景确定,存储标识下文详述。
最近一次获取的历史消息为用户端发送消息拉取请求之前、且与消息拉取请求距离最近的一次消息拉取请求获取的消息,直播间消息可以包括普通消息和点对点消息,普通消息可以为用户与用户之间的、用户与主播之间的对话消息,例如,用户A:“主播解说的好专业”;点对点消息可以为直播间中控制信息,例如,在直播间为主播PK直播间时,点对点消息可以为“主播A与主播B正在连麦中”。
在S102中,每个直播间包括两种类型的消息列表,分别为普通消息列表和点对点消息列表,在具体实施中,一个直播间包括一个普通消息列表和多个点对点消息列表,普通消息列表中用于存储直播间中的普通消息,点对点消息列表用于存储直播间中的点对点消息(即控制消息),不同的用户对应不同的点对点消息列表,但是,不同的用户对应同一普通消息列表。
消息列表中包括的存储标识(又称cursor)包括时间戳和消息序号,时间戳表征消息写入消息列表时的时间,消息序号用于表征消息的编号,如,消息序号可以为数字;存储标识的高32位表征时间戳,存储标识的低32位表征消息序号。
以下介绍消息写入消息列表的过程。
为每个直播间所有的普通消息维护一个计数器,该计数器用于将普通消息写入到消息存储系统,同时,为每个用户维护一个计数器,该计数器用于将点对点消息写入到消息存储系统。
考虑到直播间在直播时,会存在大量用户同时在线获取消息,因此,消息存储系统中的消息可以是分片存储,每个分片对应多个直播间,同时,每个分片对应一个主节点和多个从节点,主节点负责将获取的消息写入消息列表,从节点负责从消息列表读取消息。
主节点在运行过程中可能会发生故障,如重启,已计数过的消息序号在设备重启后会丢失,也就是,消息序号会从0开始计数,若主节点在写入消息时仅写入消息序号,而不写入时间戳,那么,在拉取消息时,消息拉取请求中仅包括消息序号,用户可能会拉取到重复的消息。为了保证消息不丢失和不重复,主节点在写入消息时,同时写入消息的消息序号和时间戳,这样,可以保证消息拉取的可靠度。
在直播间产生消息后,服务器获取生成的所述目标直播间的待写入消息,为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表。
这里,待写入消息可以为用户端在直播间的普通消息,也可以为用户端在直播间中接收到的点对点消息;当前时间对应的时间戳为消息写入消息列表时的时间。
在开始直播后,服务器可以获取参与直播的各个用户的消息,将获取的消息作为待写入消息,按照消息产生时间由远及近的顺序,依次为每条消息生成消息序号,消息产生时间越远的消息的消息序号越小,消息产生时间越近的消息的消息序号越大,比如,待写入消息包括3条,产生时间分别为T1、T2、T3,按照时间由远及近排序后的顺序为T1、T2、T3,产生时间为T1的消息的序号为1,产生时间为T2的消息的序号为2,产生时间为T3的消息的序号为3。
按照消息产生时间由远及近的顺序,将待写入消息(消息内容)、对应的消息序号和写入该消息的时间戳写入到消息列表中,可以参考下表,下表中的消息仅为示例,消息列表中包括的消息数目可以根据实际情况确定。
直播间的消息可能为普通消息,也可能为点对点消息,不同类型的消息写入不同的消息列表中。
当直播间对应的待写入消息为普通消息时,则将普通消息写入到普通消息列表中,即,若待写入消息为普通消息,为普通消息生成第一消息序号,并将普通消息、第一消息序号和当前时间对应的第一时间戳对应写入到普通消息列表中。其中,第一消息序号表征各条普通消息对应的序号,第一时间戳表征将普通消息写入普通消息列表的时间,普通消息列表中普通消息的存储结构可以参考上表。
当待写入消息为点对点消息时,将点对点消息写入到对应用户的点对点消息列表,也就是,为点对点消息生成第二消息序号,并将点对点消息、第二消息序号和当前时间对应的第二时间戳对应写入到每个用户对应的点对点消息列表中。其中,第二消息序号表征各条点对点消息对应的序号,第二时间戳表征将直播消息写入点对点消息列表的时间,点对点消息列表中点对点消息的存储结构可以参考上表。
在获取到针对目标直播间的消息拉取请求后,可以确定存储该直播间消息的节点,该节点从目标直播间对应的消息列表中,查询与用户标识匹配的消息列表,将查找到的消息列表作为目标消息列表,目标消息列表可以包括普通消息列表和点对点消息列表。
在S103中,历史消息存储标识可以为最近一次获取的历史消息的存储标识,该历史消息可以为时间戳距离消息拉取请求最近的消息,例如,上一次消息拉取请求获取了10条消息,上述十条消息按照消息产生时间由远及近的顺序排序后为A1、A2、A3……A10,消息A10的存储标识即为历史消息存储标识。
在获取到目标消息列表后,比对历史消息存储标识和目标消息列表中的各条消息的存储标识,以确定需要反馈的消息,这样,目标消息列表中包括多少条消息便需要比对多少次,处理效率比较低。为了提高处理效率,仅比对历史消息存储标识和目标消息列表中最新消息的存储标识,以下详述。
在确定待推送信息时,从目标消息列表中,获取最新消息的存储标识;最新消息为最近一次写入目标消息列表中的消息,也就是,目标消息列表中当前正在写入的消息。
若历史消息存储标识指示的时间戳小于最新消息的时间戳,且历史消息存储标识指示的消息序号小于最新消息的消息序号,则基于历史消息存储标识,从目标消息列表中,确定待拉取消息。
以普通消息为例进行说明。
在获取到消息拉取请求后,比对历史消息存储标识指示的时间戳和最新消息的时间戳,以及比对历史消息存储标识指示的消息序号和最新消息的消息序号。
当历史消息存储标识指示的时间戳小于最新消息的时间戳,且历史消息存储标识指示的消息序号小于最新消息的消息序号,则说明消息存储系统中已存储存在当前需要拉取的消息,此时,可以从历史消息存储标识中获取消息序号。
在普通消息列表中查找获取的该消息序号,在查找到该消息序号后,统计查找到的消息序号之后的预设数目个消息序号,提取预设数目个消息序号分别对应的消息,将获取的消息作为待拉取消息,并推送给用户端。其中,预设数目可以根据实际情况确定,比如为10。
例如,历史消息存储标识中的消息序号为5,普通消息列表中消息序号已更新到20,若预设数目为10,则将消息序号6-15对应的消息作为待拉取消息。
为了便于查询一般使用消息序号,不过应当注意,也可以使用时间戳在目标消息列表中确定待拉取消息,确定的过程可以参考利用消息序号确定的过程,此处不进行过多叙述。
上述示例是以普通消息为例进行说明的,在目标消息列表为点对点消息列表时,确定待拉取消息的过程可以参考上文。
在确定待拉取消息时,可能由于节点同步延迟导致无法拉取到消息,也就是,历史消息存储标识指示的时间戳大于或者等于最新消息的时间戳,和/或历史消息存储标识指示的消息序号大于或者等于最新消息的消息序号,此时,向用户端反馈用于指示没有可推送消息的指示信息。
这里,指示信息中可以包括历史消息存储标识。
在具体实施过程中,当历史消息存储标识指示的时间戳大于或者等于最新消息的时间戳,或者历史消息存储标识指示的消息序号大于或者等于最新消息的消息序号,或者历史消息存储标识指示的时间戳大于或者等于最新消息的时间戳、且历史消息存储标识指示的消息序号大于或者等于最新消息的消息序号,说明目标消息列表中尚未同步到最新的消息,此时,可以不向用户端反馈任何消息,而是将历史消息存储标识携带在指示消息中反馈给用户端,这样,可以避免用户端拉取到已拉取过的消息。
用户端在首次发起拉取消息请求,消息拉取请求中存储标识指示的时间戳和消息序号均为0,服务器会返回若干条消息和反馈消息中最后一条消息对应的存储标识,客户端将接收到最后一条消息的存储标识作为下一次消息拉取请求的历史消息存储标识(fetchCursor)发送给服务器,同时,发送已收到的若干消息的消息标识。
服务器接收下一次消息拉取请求里的fetchCursor和消息标识列表,从消息存储系统中,获取与fetchCursor对应的消息,可以记为msgs,以及每条消息对应的存储标识,可以记为cursors,并将msgs和cursors发送到数据中心,服务器之后每一次消息拉取请求的过程与该过程相同,此处不进行赘述。
数据中心会存储用户的拉取记录,包括每次数据拉取请求中携带的fetchCursor,和服务器每次推送给用户端的每条消息的消息标识和存储标识,这样,当服务器接收到用户端发送的数据拉取请求后,确定利用存储标识确定用户端和消息存储系统是否发生异常,以下详述。
服务器获取最近一次发送给用户端的待拉取消息的目标存储标识,若所述历史消息存储标识与所述目标存储标识不匹配,则生成异常提示信息,所述异常提示信息用于提示所述用户端出现异常或者消息存储系统出现异常。
这里,目标存储标识为服务器最近一次推送给用户端的待拉取消息中的最后一条消息的存储标识,最后一条消息为最大时间戳指示的存储标识对应的消息,或者最大消息序号指示的存储标识对应的消息。
在具体实施过程中,比对历史消息存储标识中的时间戳和目标存储标识中的时间戳,以及比对历史消息存储标识中的消息序号和目标存储标识中的消息序号。
当历史消息存储标识中的时间戳和目标存储标识中的时间戳不匹配,且历史消息存储标识中的消息序号和目标存储标识中的消息序号不匹配时,可能用户端重启了,也可能为消息存储系统出现了故障,那么,可以生成异常提示信息,以进行提示。
考虑到消息存储系统出现故障时,可能会影响服务器为用户推送的消息,因此,当历史消息存储标识中的时间戳和目标存储标识中的时间戳不匹配,且历史消息存储标识中的消息序号和目标存储标识中的消息序号不匹配,但是,历史消息存储标识中的消息序号和已记录cursors中的消息序号匹配,而历史消息存储标识中的时间戳和已记录cursors中的时间戳不匹配,则说明消息存储系统可能存在故障,可以指示相关人员对消息存储系统进行检修。
当历史消息存储标识中的时间戳和目标存储标识中的时间戳不匹配,且历史消息存储标识中的消息序号和目标存储标识中的消息序号不匹配,但是,历史消息存储标识中的消息序号和已记录cursors中的消息序号匹配,且历史消息存储标识中的时间戳和已记录cursors中的时间戳匹配,则说明用户端可能存在故障,可以对相关人员进行提示。
本公开实施例提供了一种直播间消息拉取的方法,如图2所示,该方法包括:
S201,获取生成的所述目标直播间的待写入消息;
S202,为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表。
其中,消息列表包括普通消息列表和点对点消息列表。
在执行S202时,可以包括以下步骤:
若所述待写入消息为普通消息,为所述普通消息生成第一消息序号,并将所述普通消息、所述第一消息序号和当前时间对应的第一时间戳对应写入到所述普通消息列表中。
若所述待写入消息为点对点消息,为所述点对点消息生成第二消息序号,并将所述点对点消息、所述第二消息序号和当前时间对应的第二时间戳对应写入到每个用户对应的点对点消息列表中。
将消息写入直播间对应的消息列表的过程可以参考上文,此处不进行过多叙述。
基于同一发明构思,本公开实施例中还提供了与直播间消息拉取的方法对应的直播间消息的拉取装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述直播间消息拉取的方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参考图3,本公开实施例提供了一种直播间消息拉取的装置的示意图,所述装置包括:
接收模块31,用于接收用户端发起的针对目标直播间的消息拉取请求;所述消息拉取请求中包括与所述用户端对应的用户标识,以及最近一次获取的历史消息的历史消息存储标识;
获取模块32,用于从与所述目标直播间对应的消息列表中,获取与所述用户标识对应的目标消息列表;所述消息列表中包括各条消息分别对应的存储标识,所述存储标识包括消息写入所述消息列表时的时间戳和消息序号;
确定模块33,用于基于所述历史消息存储标识,以及所述目标消息列表中的所述各条消息分别对应的存储标识,确定待拉取消息,并发送给所述用户端。
在一种可选地实施方式中,所述装置还包括:写入模块34;
所述获取模块32还用于:
获取生成的所述目标直播间的待写入消息;
所述写入模块34用于为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表。
在一种可选地实施方式中,所述存储标识的高32位用于表示所述时间戳,所述存储标识的低32位用于表示所述消息序号。
在一种可选地实施方式中,所述确定模块33用于根据以下步骤确定所述待拉取消息:
从所述目标消息列表中,获取最新消息的存储标识;所述最新消息为最近一次写入所述目标消息列表中的消息;
若所述历史消息存储标识指示的时间戳小于所述最新消息的时间戳,且所述历史消息存储标识指示的消息序号小于所述最新消息的消息序号,则基于所述历史消息存储标识,从所述目标消息列表中,确定所述待拉取消息。
在一种可选地实施方式中,所述确定模块33还用于:
若所述历史消息存储标识指示的时间戳大于或者等于所述最新消息的时间戳,和/或所述历史消息存储标识指示的消息序号大于或者等于所述最新消息的消息序号,则向所述用户端反馈用于指示没有可推送消息的指示信息。
在一种可选地实施方式中,所述获取模块32还用于:
获取最近一次发送给用户端的待拉取消息的目标存储标识;
所述确定模块33还用于若所述历史消息存储标识与所述目标存储标识不匹配,则生成异常提示信息;所述异常提示信息用于提示所述用户端出现异常或者消息存储系统出现异常。
参考图4,本公开实施例提供了一种直播间消息拉取的装置的示意图,所述装置包括:
获取模块41,用于获取生成的所述目标直播间的待写入消息;
处理模块42,用于为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表。
其中,所述消息列表包括普通消息列表和点对点消息列表。
在一种可选地实施方式中,所述处理模块42用于根据以下步骤为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表:
若所述待写入消息为普通消息,为所述普通消息生成第一消息序号,并将所述普通消息、所述第一消息序号和当前时间对应的第一时间戳对应写入到所述普通消息列表中;
若所述待写入消息为点对点消息,为所述点对点消息生成第二消息序号,并将所述点对点消息、所述第二消息序号和当前时间对应的第二时间戳对应写入到每个用户对应的点对点消息列表中。
对应于图1中的直播间消息拉取的方法,本公开实施例还提供了一种计算机设备50,如图5所示,为本公开实施例提供的计算机设备80结构示意图,包括:
处理器51、存储器52、和总线53;存储器52用于存储执行指令,包括内存521和外部存储器522;这里的内存521也称内存储器,用于暂时存放处理器51中的运算数据,以及与硬盘等外部存储器522交换的数据,处理器51通过内存521与外部存储器522进行数据交换,当所述计算机设备50运行时,所述处理器51与所述存储器52之间通过总线53通信,使得所述处理器51在用户态执行以下指令:
接收用户端发起的针对目标直播间的消息拉取请求;所述消息拉取请求中包括与所述用户端对应的用户标识,以及最近一次获取的历史消息的历史消息存储标识;
从与所述目标直播间对应的消息列表中,获取与所述用户标识对应的目标消息列表;所述消息列表中包括各条消息分别对应的存储标识,所述存储标识包括消息写入所述消息列表时的时间戳和消息序号;
基于所述历史消息存储标识,以及所述目标消息列表中的所述各条消息分别对应的存储标识,确定待拉取消息,并发送给所述用户端。
一种可能的实施方式中,处理器51执行的指令中,还包括:
获取生成的所述目标直播间的待写入消息;
为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表。
可选地,所述存储标识的高32位用于表示所述时间戳,所述存储标识的低32位用于表示所述消息序号。
一种可能的实施方式中,处理器51执行的指令中,基于所述历史消息存储标识,以及所述目标消息列表中的所述各条消息分别对应的存储标识,确定所述待拉取消息,包括:
从所述目标消息列表中,获取最新消息的存储标识;所述最新消息为最近一次写入所述目标消息列表中的消息;
若所述历史消息存储标识指示的时间戳小于所述最新消息的时间戳,且所述历史消息存储标识指示的消息序号小于所述最新消息的消息序号,则基于所述历史消息存储标识,从所述目标消息列表中,确定所述待拉取消息。
一种可能的实施方式中,处理器51执行的指令中,所述方法还包括:
若所述历史消息存储标识指示的时间戳大于或者等于所述最新消息的时间戳,和/或所述历史消息存储标识指示的消息序号大于或者等于所述最新消息的消息序号,则向所述用户端反馈用于指示没有可推送消息的指示信息。
一种可能的实施方式中,处理器51执行的指令中,还包括:
获取最近一次发送给用户端的待拉取消息的目标存储标识;
若所述历史消息存储标识与所述目标存储标识不匹配,则生成异常提示信息;所述异常提示信息用于提示所述用户端出现异常或者消息存储系统出现异常。
对应于图2中的直播间消息拉取的方法,本公开实施例还提供了一种计算机设备60,如图6所示,为本公开实施例提供的计算机设备90结构示意图,包括:
处理器61、存储器62、和总线63;存储器62用于存储执行指令,包括内存621和外部存储器622;这里的内存621也称内存储器,用于暂时存放处理器61中的运算数据,以及与硬盘等外部存储器622交换的数据,处理器61通过内存621与外部存储器622进行数据交换,当所述计算机设备60运行时,所述处理器61与所述存储器62之间通过总线63通信,使得所述处理器61在用户态执行以下指令:
获取生成的所述目标直播间的待写入消息;
为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表。
可选地,所述消息列表包括普通消息列表和点对点消息列表。
一种可能的实施方式中,处理器61执行的指令中,所述为获取的待写入消息生成消息序号,并将所述待写入消息、所述消息序号,和当前时间对应的时间戳对应写入到所述消息列表,包括:
若所述待写入消息为普通消息,为所述普通消息生成第一消息序号,并将所述普通消息、所述第一消息序号和当前时间对应的第一时间戳对应写入到所述普通消息列表中;
若所述待写入消息为点对点消息,为所述点对点消息生成第二消息序号,并将所述点对点消息、所述第二消息序号和当前时间对应的第二时间戳对应写入到每个用户对应的点对点消息列表中。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的资源调度的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的评论信息获取方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的直播间消息拉取的方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。