具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。同时,在本申请实施例的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本申请实施例的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
可以理解的是,在本申请的具体实施方式中,涉及到用户信息如主播的直播内容等相关的数据,当本申请以上实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本申请实施例提供一种直播状态信息同步方法、装置、电子设备和计算机可读存储介质。
具体地,本实施例将从直播状态信息同步装置的角度进行描述,该直播状态信息同步装置具体可以集成在电子设备中,即本申请实施例直播状态信息同步方法可以由电子设备执行,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、触控屏幕、游戏机、或者个人电脑(Personal Computer,PC)等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
例如,该电子设备可以是移动终端,该移动终端可以通过网络接收内容流端的第一直播状态请求,其中,所述第一直播状态请求携带有待同步主播的第一标识信息;响应于所述第一直播状态请求,基于所述第一标识信息和预设的主播状态队列,获取所述待同步主播的直播状态信息,其中,所述主播状态队列中预缓存有各主播的直播状态信息;将所述待同步主播的直播状态信息发送至所述内容流端,以在所述内容流端同步所述待同步主播的直播状态信息。
在一些实施例中,该直播状态信息同步装置还可以集成在多个电子设备中,比如,直播状态信息同步装置可以集成在多个服务器中,由多个服务器来实现本申请的直播状态信息同步方法。又如,直播状态信息同步装置可以集成在多个终端中,由多个终端来实现本申请的直播状态信息同步方法。
在一些实施例中,服务器也可以以终端的形式来实现,比如,可以将个人电脑设置为服务器来集成该直播状态信息同步装置,由个人电脑设置成的服务器来实现本申请的直播状态信息同步方法。
该电子设备具体可以是本申请实施例中用于预缓存主播状态队列的同步组件,其中,该同步组件具体可以以服务器或终端形式实现,本实施例直播状态信息同步方法中将以电子设备是预缓存主播状态队列的同步组件为例。
例如,参见图1,以该直播状态信息同步方法应用于如图1所示同步系统、该直播状态信息同步装置集成在用于预缓存主播状态队列的同步组件中为例,该同步系统包括用于预缓存主播状态队列的同步组件10、内容流端20、直播服务器30和直播端40,预缓存主播状态队列的同步组件10分别与内容流端20、直播服务器30、直播端40之间通过网络连接,比如,通过有线或无线网络连接等,其中,直播状态信息同步装置集成在同步组件10中。该同步组件10可以接收内容流端的第一直播状态请求,其中,所述第一直播状态请求携带有待同步主播的第一标识信息;响应于所述第一直播状态请求,基于所述第一标识信息和预设的主播状态队列,获取所述待同步主播的直播状态信息,其中,所述主播状态队列中预缓存有各主播的直播状态信息;将所述待同步主播的直播状态信息发送至所述内容流端,以在所述内容流端同步所述待同步主播的直播状态信息。
以下结合附图分别进行详细说明,本申请实施例中以执行主体是如图1所示的同步组件10为例,为简化表述,后文中将省略该执行主体。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于附图所示的顺序执行所示出或描述的步骤。
如图2所示,该游戏数据交互方法的具体流程可以如下步骤201~步骤203,其中:
201、接收内容流端20的第一直播状态请求。
其中,所述第一直播状态请求携带有待同步主播的第一标识信息。具体地,第一直播状态请求可以是由内容流端20发起的、用于请求同步待同步主播的直播状态信息至内容流端20的请求。
其中,内容流端20是指展示如个人主页等内容流的消费端,例如,社交媒体APP端。
其中,待同步主播是指请求同步直播状态信息至内容流端20的主播。例如,用户1在内容流端a打开了主播A的个人主页,将则会触发携带有主播A的标识信息第一直播状态请求,此时待同步主播即为主播A。
其中,第一标识信息是指待同步主播的标识信息,例如,待同步主播的社交媒体账号。
步骤101中接收内容流端20的第一直播状态请求的方式有多种,示例性地,包括:
①基于个人主页内容的显示触发第一直播状态请求。例如,首先,用户在内容流端20打开查看待同步主播的内容(如待同步主播在某社交媒体上的个人主页等),从而触发携带有待同步主播的第一标识信息的第一直播状态请求;然后,同步组件10将接收到内容流端20的第一直播状态请求。以便可以实现在显示个人主页内容时同步对应主播的直播状态信息。
②基于搜索内容的显示触发第一直播状态请求。例如,首先,用户在内容流端20搜索目标内容时,触发携带有目标内容对应的主播的标识信息(即待同步主播的第一标识信息)的第一直播状态请求;然后,同步组件10将接收到内容流端20的第一直播状态请求。以便可以实现在显示搜索内容时同步对应主播的直播状态信息。
③基于主播发布内容的显示触发第一直播状态请求。例如,首先,用户在内容流端20随机刷新到主播发布内容时,从而触发携带有待同步主播(该随机刷新到内容对应的主播即为待同步主播)的第一标识信息的第一直播状态请求;然后,同步组件10将接收到内容流端20的第一直播状态请求。以便可以实现在随机刷新到主播发布内容时同步对应主播的直播状态信息。
202、响应于所述第一直播状态请求,基于所述第一标识信息和预设的主播状态队列,获取所述待同步主播的直播状态信息。
其中,所述主播状态队列中预缓存有各主播的直播状态信息。
其中,主播的直播状态信息用于指示主播状态(即主播是否处于直播中)、处于直播时的直播内容(如实时语音、视频、字幕等内容)。
具体地,如图3所示,图3是本申请实施例中提供的同步组件10预缓存主播状态队列的一种交互过程示意图,主播状态队列中记录了各个主播的标识信息(如账号)、是否处于直播中、处于直播时的直播内容。示例性地,同步组件10可以进一步包括用于监控各直播端40的主播状态的消息件101(如Kafka)、用于存储主播状态队列的数据库(如Redis数据库)102。
主播状态队列中各主播的直播状态信息的预缓存方式在后文中将详细介绍,具体可以参考后文相关说明,为简化表述,此处不再赘述。
步骤102中获取待同步主播的直播状态信息的方式有多种,示例性地,包括:
1)直接采用主播队列中的直播状态信息,向内容流端20反馈待同步主播的直播状态信息。此时,步骤202具体包括如下步骤1021A~1023A,其中:
1021A、响应于所述第一直播状态请求,从所述主播状态队列中查询与所述第一标识信息关联的直播状态信息。
1022A、若与所述第一标识信息关联的直播状态信息指示所述待同步主播处于直播中,则将所述待同步主播处于直播中和/或所述待同步主播处于直播时的直播内容,作为待同步主播的直播状态信息。
1023A、若与所述第一标识信息关联的直播状态信息指示所述待同步主播处于直播中,则将所述待同步主播未直播,作为待同步主播的直播状态信息。
2)结合主播状态队列的直播状态信息和直播服务器30的直播状态信息,向内容流端20反馈待同步主播的直播状态信息。例如,先查询主播状态队列中待同步主播是否存在待同步主播处于直播时的直播内容,若存在,则直接将主播状态队列中待同步主播中直播状态信息(包括处于直播中、处于直播时的直播内容)反馈至内容流端20;否则,若不存在,则从直播服务器30中查询待同步主播直播状态信息(包括是否处于直播中、处于直播时的直播内容)反馈至内容流端20。此时,步骤202具体包括如下步骤1021B~1023B,其中:
1021B、响应于所述第一直播状态请求,从所述主播状态队列中查询是否存在与所述第一标识信息关联的直播内容。
示例性地,主播状态队列中存在与第一标识信息关联的直播内容具体是指主播状态队列中与第一标识信息关联的主播状态记录为直播中、且存在与第一标识信息关联的直播内容。若主播状态队列中与第一标识信息关联的主播状态记录为直播中、且存在与第一标识信息关联的直播内容,则确定主播状态队列中存在与第一标识信息“主播1”关联的直播状态信息。若主播状态队列中与第一标识信息关联的主播状态记录为未直播、或者主播状态队列中未记录第一标识信息,则视为主播状态队列中不存在与第一标识信息关联的直播内容。
如图3所示,主播状态队列存储于同步组件10的Redis数据库102中,例如,当接收到携带有第一标识信息为“主播1”的第一直播状态请求时,将从Redis数据库102中存储的主播状态队列中查询是否存在与第一标识信息“主播1”关联的直播内容。由于主播状态队列中与第一标识信息“主播1”关联的主播状态记录为直播中、且存在与第一标识信息“主播1”关联的直播内容,则确定主播状态队列中存在与第一标识信息“主播1”关联的直播内容。
又如,当接收到携带有第一标识信息为“主播3”的第一直播状态请求时,将从Redis数据库102中存储的主播状态队列中查询是否存在与第一标识信息“主播3”关联的直播内容。由于主播状态队列中与第一标识信息“主播3”关联的主播状态记录为未直播,则确定主播状态队列中不存在与第一标识信息“主播3”关联的直播内容。
1022B、若所述主播状态队列中存在与所述第一标识信息关联的直播内容,则从所述主播状态队列中获取与所述第一标识信息匹配的直播状态信息,以作为所述待同步主播的直播状态信息。
示例性地,主播状态队列中与第一标识信息匹配的直播状态信息具体可以是与第一标识信息的直播内容。若主播状态队列中存在与第一标识信息关联的直播状态信息,可以直接从主播状态队列中获取与第一标识信息关联的直接内容作为待同步主播的直播状态信息。
为方便理解,接以上步骤1021B中的例子继续说明,例如,由于主播状态队列中存在与第一标识信息“主播1”关联的直播状态信息,因此可以直接从主播状态队列中获取与第一标识信息“主播1”匹配的直播状态信息(即直播内容1),以作为待同步主播(即“主播1”)的直播状态信息。
1023B、若所述主播状态队列中不存在与所述第一标识信息关联的直播内容,则从预设的直播服务器30中获取与所述第一标识信息匹配的直播状态信息,以作为所述待同步主播的直播状态信息。
示例性地,步骤1023B具体可以包括:若所述主播状态队列中不存在与所述第一标识信息关联的直播内容,则向预设的直播服务器30发起第二直播状态请求;接收所述直播服务器30响应于所述第二直播状态请求反馈的与所述第一标识信息匹配的直播状态信息,以作为所述待同步主播的直播状态信息。
其中,所述第二直播状态请求携带有所述第一标识信息。具体地,第二直播状态请求可以是由同步组件10发起的、用于请求同步待同步主播的直播状态信息至同步组件10主播状态队列的请求。
请参考图1和图3,具体地,待同步主播可能处于直播中也可能未直播,当待同步主播处于直播中时,直播服务器30中将记录到由直播端40同步过来的直播内容;当待同步主播未直播时,直播服务器30中将不会有待同步主播的直播内容。为此,响应于第二直播状态请求,当直播服务器30中也不存在待同步主播的直播内容时,直播服务器30可以将待同步主播未直播(即主播状态为未直播)作为与第一标识信息匹配的直播状态信息反馈给同步组件10;同步组件10接收直播服务器30响应于第二直播状态请求反馈的与第一标识信息匹配的直播状态信息(即主播为未直播),作为待同步主播的直播状态信息。当直播服务器30中存在待同步主播的直播内容时,直播服务器30可以将待同步主播的直播内容作为与第一标识信息匹配的直播状态信息反馈给同步组件10;同步组件10接收直播服务器30响应于第二直播状态请求反馈的与第一标识信息匹配的直播状态信息(即待同步主播的直播内容),作为待同步主播的直播状态信息。
为方便理解,接以上步骤1021B中的例子继续说明,例如,若主播状态队列中不存在与第一标识信息“主播3”关联的直播状态信息,则同步组件10将向预设的直播服务器30发起携带有第一标识信息“主播3”的第二直播状态请求,直播服务器30先基于第一标识信息查询待同步主播是否处于直播中,若待同步主播处于直播中,则直播服务器30获取待同步主播的直播内容作为与第一标识信息“主播3”匹配的直播状态信息反馈给同步组件10;同步组件10接收直播服务器30响应于第二直播状态请求反馈的与第一标识信息“主播3”匹配的直播状态信息(即“主播3”的直播内容),作为待同步主播的直播状态信息。
进一步地,为了提高直播状态信息同步的实时性,当主播状态队列中存在与第一标识信息关联的直播状态信息时,还可以进一步检测主播状态队列中与第一标识信息关联的直播状态信息的更新时间,当更新时间较长时,需从直播服务器30再次发起查询请求,从而可以在基于直播服务器30预缓存直播状态信息至主播状态队列出现异常时,可以保证主播状态队列中的直播状态信息的实时性,进而保证同步至内容流端20的直播状态信息的实时性。
此时,步骤1022B具体可以包括:若所述主播状态队列中存在与所述第一标识信息关联的直播内容,则检测所述主播状态队列中与所述第一标识信息关联的直播状态信息的已更新时长;若所述已更新时长小于预设时长阈值,则从所述主播状态队列中获取与所述第一标识信息匹配的直播状态信息,以作为所述待同步主播的直播状态信息。
对应地,该直播状态信息同步方法还包括:若所述已更新时长大于或等于预设时长阈值,则向预设的直播服务器30发起第三直播状态请求;接收所述直播服务器30响应于所述第三直播状态请求反馈的与所述第一标识信息匹配的直播状态信息,以作为所述待同步主播的直播状态信息。
其中,所述第三直播状态请求携带有所述第一标识信息。具体地,第三直播状态请求可以是由同步组件10发起的、用于请求同步待同步主播的直播状态信息至同步组件10主播状态队列的请求。
第二直播状态请求与第三直播状态请求的区别在于:第二直播请求是在主播状态队列中不存在与第一标识信息关联的直播状态信息时向直播服务器30发起的状态查询请求;第三直播请求是在主播状态队列中存在与第一标识信息关联的直播状态信息、但中与述第一标识信息关联的直播状态信息的已更新时长大于或等于预设时长阈值时,向直播服务器30发起的状态查询请求。
其中,“向预设的直播服务器30发起第三直播状态请求;接收所述直播服务器30响应于所述第三直播状态请求反馈的与所述第一标识信息匹配的直播状态信息,以作为所述待同步主播的直播状态信息”,与上述步骤1023B中的实现类似,具体可以参考上述步骤1023B中的相关说明,为简化表述,此处不再赘述。
其中,已更新时长具体是指主播状态队列中与第一标识信息关联的直播状态信息最近一次更新时间与当前时间的间隔时长,例如,主播状态队列中与第一标识信息“主播1”关联的直播状态信息最近一次更新时间为9:00、当前时间为21:00,则最近一次更新时间9:00与当前时间的间隔时长为12h,即主播状态队列中与第一标识信息“主播1”关联的直播状态信息的已更新时长为12h。
其中,预设时长阈值的具体取值可以根据实际业务场景需求而设置,此处对预设时长阈值的具体取值不做限制,例如,预设时长阈值可以是10分钟、1小时、1天等。
例如,若主播状态队列中存在与第一标识信息(如“主播1”)关联的直播状态信息,则检测主播状态队列中与第一标识信息(“主播1”)关联的直播状态信息的已更新时长(如主播状态队列中与第一标识信息“主播1”关联的直播状态信息最近一次更新时间为9:58、当前时间为10:00,则主播状态队列中与第一标识信息“主播1”关联的直播状态信息的已更新时长为2min);若已更新时长(2min)小于预设时长阈值(如30min),则从主播状态队列中获取与第一标识信息(“主播1”)匹配的直播状态信息,以作为待同步主播的直播状态信息。
又如,若主播状态队列中存在与第一标识信息(如“主播2”)关联的直播状态信息,则检测主播状态队列中与第一标识信息(“主播2”)关联的直播状态信息的已更新时长(如主播状态队列中与第一标识信息“主播2”关联的直播状态信息最近一次更新时间为9:00、当前时间为10:00,则主播状态队列中与第一标识信息“主播2”关联的直播状态信息的已更新时长为1h);若已更新时长(1h)大于或等于预设时长阈值(如30min),则向预设的直播服务器30发起第三直播状态请求;接收直播服务器30响应于第三直播状态请求反馈的与第一标识信息(“主播2”)匹配的直播状态信息,以作为待同步主播的直播状态信息。
第一方面,当主播状态队列中与第一标识信息关联的直播状态信息的已更新时长小于预设时长阈值时,通过从主播状态队列中获取与第一标识信息匹配的直播状态信息,以作为待同步主播的直播状态信息;一方面,可以提高主播状态信息同步至内容流端20的速度,即提高了同步至内容流端20的直播状态信息的实时性;另一方面,由于对于同一主播的直播状态信息无需针对不同内容流端20分别向直播服务器30发起状态请求,因而可以降低直播服务器30的压力。
第二方面,当主播状态队列中与第一标识信息关联的直播状态信息的已更新时长大于或等于预设时长阈值时,通过向预设的直播服务器30发起第三直播状态请求;接收直播服务器30响应于第三直播状态请求反馈的与第一标识信息匹配的直播状态信息,以作为待同步主播的直播状态信息;可以在基于直播服务器30预缓存直播状态信息至主播状态队列出现异常时,可以保证主播状态队列中的直播状态信息的实时性,进而保证同步至内容流端20的直播状态信息的实时性。由此,可以提高主播状态信息同步至内容流端20的实时性、降低直播服务器30的压力。
第三方面,当基于直播端40开关播通知预缓存主播的直播状态信息至主播状态队列、与基于直播服务器30定时轮询将各主播的直播状态信息定时预缓存至主播状态队列都出现异常时,可以保证可以实时同步直播状态信息至内容流端20,保证了直播状态信息同步的高可用性。
203、将所述待同步主播的直播状态信息发送至所述内容流端20,以在所述内容流端20同步所述待同步主播的直播状态信息。
示例性地,请参考图1和图3,首先,同步组件10将待同步主播的直播状态信息发送至内容流端20;然后,内容流端20在显示待同步主播的相关内容的同时显示待同步主播的直播状态信息。
步骤203中,在内容流端20同步待同步主播的直播状态信息的方式有多种,示例性地,包括:
①例如,基于待同步主播的个人主页内容的显示触发第一直播状态请求时,同步组件10在响应于第一直播状态请求将待同步主播的直播状态信息发送至内容流端20后,若待同步主播处于直播中,则内容流端20可以在显示待同步主播的个人主页内容的同时显示待同步主播的直播内容。若待同步主播未直播,则内容流端20只显示待同步主播的个人主页内容。
②又如,基于搜索的目标内容的显示触发第一直播状态请求时,同步组件10在响应于第一直播状态请求将待同步主播的直播状态信息发送至内容流端20后,若待同步主播处于直播中,则内容流端20可以在显示搜索的目标内容的同时显示目标内容对应的主播(即待同步主播)的直播内容。若待同步主播未直播,则内容流端20只显示搜索的目标内容。
③再如,基于待同步主播发布内容的显示触发第一直播状态请求时,同步组件10在响应于第一直播状态请求将待同步主播的直播状态信息发送至内容流端20后,若待同步主播处于直播中,则内容流端20可以在显示待同步主播的发布内容的同时显示待同步主播的直播内容。若待同步主播未直播,则内容流端20只显示待同步主播的发布内容。
其中,在内容流端20上同步待同步主播的直播状态信息时,可以在待同步主播的头像上、待同步主播的相关内容的旁边等位置进行显示,本申请实施例中对在内容流端20上同步的待同步主播的直播状态信息的具体显示位置不作限制。
为了实现将多个用户的直播状态查询请求进行合并,本申请实施例中通过将各主播的直播状态信息预缓存至主播状态队列中,下面举例介绍将各主播的直播状态信息预缓存至主播状态队列中的几种方式:
一、基于直播端40的开关播通知,将各主播的直播状态信息预缓存至主播状态队列中。
①开播时,从直播服务器30获取开播主播的直播状态信息预缓存至主播状态队列。此时,“将各主播的直播状态信息预缓存至主播状态队列中”具体可以包括如下步骤A1~A2,其中:
A1、接收直播端40的第一主播的开播状态通知。
其中,所述开播状态通知携带有所述第一主播的第二标识信息。
其中,第一主播是指开启直播的主播,例如,主播a在直播端40新开启了直播,则主播a为第一主播。
其中,第二标识信息是指第一主播的标识信息。
A2、响应于所述开播状态通知,从所述直播服务器30获取与所述第二标识信息关联的直播状态信息更新至所述主播状态队列。
示例性地,如图4所示,直播用户在直播端40开启直播时,直播端40将会发送开播状态通知(即第一主播的开播状态通知)至同步组件10中的消息件101(如Kafka消息件);然后,当监测到消息件101接收到第一主播的开播状态通知时,同步组件10将主播状态队列中与第二标识信息的主播状态更改为处于直播中,并从直播服务器30获取与第二标识信息关联的直播内容更新至主播状态队列中。
②关播时,将预缓存至主播状态队列中的已关播主播的直播状态信息移除。此时,“将各主播的直播状态信息预缓存至主播状态队列中”具体可以包括如下步骤B1~B2,其中:
B1、接收直播端40的第二主播的关播状态通知。
其中,所述关播状态通知携带有所述第二主播的第三标识信息。
其中,第二主播是指开启直播的主播,例如,主播b在直播端40新关闭了直播,则主播b为第二主播。本身申请实施例中第一主播、第二主播等主要用于区别命名。
其中,第三标识信息是指第二主播的标识信息。
B2、响应于所述关播状态通知,将所述主播状态队列中与所述第三标识信息关联的直播状态信息移除。
示例性地,如图5所示,直播用户在直播端40关闭直播时,直播端40将会发送关播状态通知(即第二主播的关播状态通知)至同步组件10中的消息件101(如Kafka消息件);然后,当监测到消息件101接收到第二主播的关播状态通知时,同步组件10将主播状态队列中与第三标识信息的主播状态更改为未直播,并将主播状态队列中与第三标识信息关联的直播内容移除。
通过基于直播端40开关播通知,将各主播的直播状态信息预缓存至主播状态队列中,可以使得当多个内容流端(即多个用户)对同一主播的直播状态信息进行查询时可以直接从主播状态队列中直接读取,而不会针对多个用户请求分别调用直播服务器30的接口进行查询,从而可以在一定程度上实现多个用户请求合并为一个用户请求,一方面,降低了直播服务器30的请求量。另一方面,即使直播服务器30短暂性出现网络异常或接口调用异常,仍然可以保证直播状态信息的正常同步,保证了直播状态信息同步的高可用性。
二、基于直播服务器30定时轮询,将各主播的直播状态信息定时预缓存至主播状态队列中。
由于可能会出现例如直播端40的开关播通知异常等导致主播状态队列中的直播状态信息更新实时性低的情况,为了提高主播状态队列中的直播状态信息的实时性,可以通过定时将直播服务器30中记录的直播状态信息更新至主播状态队列中,示例性地,可以通过如下方式1或方式2更新:
方式1:同步组件10可以定时轮询直播服务器30中的直播状态信息并预缓存至主播状态队列中。此时,“将各主播的直播状态信息预缓存至主播状态队列中”具体可以包括如下步骤C1~C3,其中:
C1、当达到预设更新间隔时,向预设的直播服务器30发送第四直播状态请求。
其中,预设更新间隔是指预设的、直播服务器30中的直播状态信息更新至主播状态队列的间隔时长。
其中,第四直播状态请求可以是由同步组件10发起的、用于请求同步各主播的直播状态信息至同步组件10主播状态队列中的请求。
C2、接收所述直播服务器30响应于所述第四直播状态请求反馈的直播中主播的标识信息和直播状态信息。
其中,直播中主播是指直播服务器30中记录的处于直播中的主播。
C3、根据所述直播中主播的标识信息和所述直播中主播的直播状态信息,更新所述主播状态队列中的直播状态信息。
示例性地,当达到预设更新间隔(如每间隔5min)时,同步组件10向预设的直播服务器30发送第四直播状态请求。当直播服务器30接收到第四直播状态请求后,响应于第四直播状态请求,从直播服务器30中查询处于直播中的各主播(即直播中主播)的标识信息和直播内容;直播服务器30器将查询到的处于直播中的各主播(即直播中主播)的标识信息和直播内容反馈给同步组件10。然后,同步组件10在接收到直播服务器30响应于第四直播状态请求反馈的直播中主播的标识信息和直播内容后,将主播状态队列中与直播中主播的标识信息关联的直播状态信息更改为:主播状态为处于直播中、直播内容为直播服务器30响应于第四直播状态请求反馈的直播内容。并将主播状态队列中其他主播标识信息关联的直播状态信息更改为:主播状态为未直播、移除已存在的直播内容。
方式2:直播服务器30主动定时反馈直播服务器30中的直播状态信息至同步组件10,以供同步组件10定时预缓存至主播状态队列中。此时,“将各主播的直播状态信息预缓存至主播状态队列中”具体可以包括如下步骤D1~D2,其中:
D1、当达到预设更新间隔时,接收预设的直播服务器30反馈的直播中主播的标识信息和直播状态信息。
D2、根据所述直播中主播的标识信息和所述直播中主播的直播状态信息,更新所述主播状态队列中的直播状态信息。
步骤D1~D2的实现与上述步骤C1~C3的实现类似,具体可以参考上述相关说明,为简化表述,此处不再赘述。
由于在某些情况下,比如在直播开启高峰期而直播端40开关播通知异常时,可能会存在直播状态信息不能及时更新至主播状态队列的情况,进一步地,为了进一步地提高主播状态队列中的直播状态信息的更新及时性,还可以基于直播服务器30的请求量调整定时轮询的时间间隔,比如,在直播服务器30的直播状态请求繁忙时定时轮询间隔短、直播状态请求空闲时轮询间隔长。此时,在步骤C1之前还可以进一步包括:基于所述直播服务器30的直播状态请求量,检测所述直播服务器30的当前繁忙程度;基于所述当前繁忙程度,确定所述直播服务器30中的直播状态信息更新至所述主播状态队列的间隔时长,以作为所述预设更新间隔。
其中,直播状态请求量具体可以是指主播状态队列中不存在直播状态信息情况下,同步组件10每单位时间(如每秒、每分钟、每小时等)为了响应内容流端20的直播状态请求而向直播服务器30发起直播状态请求的请求数量。
例如,可以基于主播状态队列中不存在直播状态信息情况下,同步组件10每单位时间(如每秒、每分钟、每小时等)为了响应内容流端20的直播状态请求而向直播服务器30发起直播状态请求的请求数量,确定直播服务器30的当前繁忙程度(如每分钟请求数量<300次时,繁忙程度为低;每分钟请求数量≥300次时,繁忙程度为高)。然后,基于直播服务器30的当前繁忙程度,从预设各时间间隔中获取与直播服务器30的当前繁忙程度匹配的时间间隔(如当繁忙程度高时,间隔时长为1min;当繁忙程度低时,间隔时长为5min),确定为直播服务器30中的直播状态信息更新至主播状态队列的间隔时长,以作为预设更新间隔。
通过基于直播服务器30定时轮询,将各主播的直播状态信息定时预缓存至主播状态队列中,使得当多个内容流端(即多个用户)对同一主播的直播状态信息进行查询时可以从主播状态队列中直接读取,而不会针对多个用户请求分别调用直播服务器30的接口,从而可以在一定程度上实现多个用户请求合并为一个用户请求,一方面,降低了直播服务器30的请求量。另一方面,即使直播服务器30短暂性出现网络异常或接口调用异常,则可以保证直播状态信息的正常同步。
由以上内容可见,通过基于直播端40开关播通知预缓存主播的直播状态信息至主播状态队列、与基于直播服务器30定时轮询将各主播的直播状态信息定时预缓存至主播状态队列中两种方式向结合,可以形成直播状态信息同步的互补,一方面,在直播端40开关播通知异常时,由于直播服务器30会定时轮询将各主播的直播状态信息定时预缓存至主播状态队列,因此可以保证主播状态队列中的直播状态信息可以得到及时更新。另一方面,在基于直播服务器30定时轮询异常时,由于直播端40开关播通知会将各主播的直播状态信息预缓存至主播状态队列中,因此可以保证主播状态队列中的直播状态信息可以得到及时更新。
三、基于实际用户请求,将各主播的直播状态信息预缓存至主播状态队列中。
由于某些情况下,如待同步主播的直播状态信息未预缓存至主播状态队列情况下,需要从直播服务器30中获取待同步主播的直播状态信息,才能保证内容流端20准确同步到待同步主播的直播状态信息。而当多个内容流端(即多个用户)都查询(直播状态信息未预缓存至主播状态队列的)同一主播的直播状态信息时,若分别针对每个内容流端(即多个用户)查询请求向直播服务器30发起一次请求,将会导致请求查询内容重复的问题,进而加大直播服务器30的访问压力;为此,可以只针对一个内容流端(即多个用户)查询请求向直播服务器30发起一次请求,并同步在至主播状态队列,其他内容流端直接从主播状态队列中读取对应的直播状态信息,由此来实现将多个用户请求合并为一个用户请求,降低了直播服务器30的访问压力。
为此,用于存储主播状态队列的数据库102具体可以为分布式数据库(如基于Redis的数据库),以通过分布数据库的分布式锁对待同步主播的主播数据进行加锁后,再向直播服务器30发送直播状态请求,以此来避免会针对多个用户请求同时向直播服务器30器查询同一主播的直播状态信息,进而降低直播服务器30的访问压力。例如,此时,“若所述主播状态队列中不存在与所述第一标识信息关联的直播内容,则向预设的直播服务器30发起第二直播状态请求”具体可以包括:若所述主播状态队列中不存在与所述第一标识信息关联的直播内容,则在基于所述分布式锁数据库对所述主播状态队列中所述第一标识信息关联的主播数据进行加锁后,基于所述第一标识信息向预设的直播服务器30发起第二直播状态请求。
又如,此时,“若所述已更新时长大于或等于预设时长阈值,则向预设的直播服务器30发起第三直播状态请求”具体可以包括:若所述已更新时长大于或等于预设时长阈值,则在基于所述分布式锁数据库对所述主播状态队列中所述第一标识信息关联的主播数据进行加锁后,基于所述第一标识信息向预设的直播服务器30发起第三直播状态请求。
对应地,“将各主播的直播状态信息预缓存至主播状态队列中”具体可以包括如下步骤E1~E2,其中:
E1、将所述直播服务器30反馈的与所述第一标识信息匹配的直播状态信息更新至所述主播状态队列。
E2、释放所述分布式锁数据库中所述第一标识信息对应的主播数据的锁。
通过基于实际用户请求,将各主播的直播状态信息预缓存至主播状态队列中,使得当多个用户对同一主播的直播状态信息进行查询时可以从主播状态队列中直接读取,而不会针对多个用户请求分别调用直播服务器30的接口,从而可以在一定程度上实现多个用户合并为一个用户请求,降低了直播服务器30的访问压力。
进一步地,为了避免内容流端20的开关播通知异常,以提高基于内容流端20更新主播状态队列中的直播状态信息的及时性,还可以检测内容流端20的开关播通知是否异常,在异常时输出直播端40开关播通知异常的提示信息。例如,当长时间没有接收到直播端40的开关播通知,而在直播服务器30状态轮询时检测到新上播的主播时,可以认为直播端40的开关播通知异常。即,该直播状态信息同步方法还可以进一步包括如下步骤F1~F3:
F1、检测直播端40的最新开关播通知时间与当前时间的目标时间间隔。
其中,最新开关播通知时间是指直播端40最近一次开播或关播的时间。
其中,目标时间间隔是指直播端40的最新开关播通知时间与当前时间的间隔时长。
F2、若所述目标时间间隔大于预设时间间隔,则检测在所述目标时间间隔内所述主播状态队列是否存在主播状态变更。
其中,预设时间间隔的具体取值可以根据实际业务场景需求而设置,此处对预设时间间隔的具体取值不作限制。
其中,主播状态队列存在主播状态变更是指主播状态队列内的主播状态由直播中变更为未直播、或者由未直播变更为直播中。
F3、若在所述目标时间间隔内所述主播状态队列存在主播状态变更,则输出所述直播端40通知异常的提示信息。
例如,当目标时间间隔(如5h)大于预设时间间隔(如4h)时,若在最新开关播通知时间与当前时间期间内,主播状态队列内的主播状态由直播中变更为未直播、或者由未直播变更为直播中等,则可以认为在目标时间间隔内主播状态队列存在主播状态变更。证明直播端40的开关播通知存在异常,可以输出直播端40通知异常的提示信息,以便可以及时发现直播端40的开关播异常情况并进行改善,进而提高基于内容流端20更新主播状态队列中的直播状态信息的及时性。
进一步地,当将主播在第一平台上的直播状态信息预缓存至主播状态队列中、用于在第二平台上显示主播的直播状态信息时,由于可能会存在主播未开通将第一平台(如A平台)的发布内容(包括直播状态信息)同步至第二平台(如B平台)的情况,为此,上述方式“一”至“三”在将各主播的直播状态信息预缓存至主播状态队列时,会基于各主播的标识信息检测各主播是否为同意同步主播(即同意将第一平台的发布内容同步至第二平台的主播);若主播不是同意同步主播,则在将各主播的直播状态信息预缓存至主播状态队列时,将该主播的直播状态信息剔除,预缓存至直播状态队列;若主播是同意同步主播,则将该主播的直播状态信息预缓存至主播状态队列,以此来保护主播发布内容的隐私。
由以上内容可以看出,本申请实施例中,通过接收内容流端20的第一直播状态请求,响应于所述第一直播状态请求,基于所述第一标识信息和预缓存有各直播的直播状态信息的预设主播状态队列中,获取所述待同步主播的直播状态信息发送至内容流端20,以在内容流端20同步待同步主播的直播状态信息;第一方面,可以有效地将直播状态信息同步至内容流端20;第二方面,由于主播状态队列预缓存了各主播的直播状态信息,因此,可以避免需针对多个内容流端(即多个用户)对同一主播的直播状态信息分别调用直播服务器30接口发起查询请求,在一定程度上实现了将多个用户请求合并为一个用户请求,一方面,避免了直播服务器30的资源浪费,降低了直播服务器30的请求量;另一方面,即使直播服务器30短暂性出现网络异常或接口调用异常,仍然可以保证直播状态信息的正常同步,保证了直播状态信息同步的高可用性。
为了更好地实施以上方法,本申请实施例还提供一种直播状态信息同步装置,该直播状态信息同步装置具体可以集成在电子设备中,比如,计算机设备,该计算机设备可以为终端、服务器等设备。
其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
比如,在本实施例中,将以直播状态信息同步装置具体集成在服务器集群为例,对本申请实施例的方法进行详细说明。
例如,如图6所示,该直播状态信息同步装置可以包括:
接收单元601,用于接收内容流端的第一直播状态请求,其中,所述第一直播状态请求携带有待同步主播的第一标识信息;
响应单元602,用于响应于所述第一直播状态请求,基于所述第一标识信息和预设的主播状态队列,获取所述待同步主播的直播状态信息,其中,所述主播状态队列中预缓存有各主播的直播状态信息;
同步单元603,用于将所述待同步主播的直播状态信息发送至所述内容流端,以在所述内容流端同步所述待同步主播的直播状态信息。
在一些实施例中,所述响应单元602具体用于:
响应于所述第一直播状态请求,从所述主播状态队列中查询是否存在与所述第一标识信息关联的直播内容;
若所述主播状态队列中不存在与所述第一标识信息关联的直播内容,则向预设的直播服务器发起第二直播状态请求,其中,所述第二直播状态请求携带有所述第一标识信息;
接收所述直播服务器响应于所述第二直播状态请求反馈的与所述第一标识信息匹配的直播状态信息,以作为所述待同步主播的直播状态信息。
在一些实施例中,所述主播状态队列存储于分布式锁数据库中,所述响应单元602具体用于:
若所述主播状态队列中不存在与所述第一标识信息关联的直播内容,则在基于所述分布式锁数据库对所述主播状态队列中所述第一标识信息关联的主播数据进行加锁后,基于所述第一标识信息向预设的直播服务器发起第二直播状态请求;
在一些实施例中,所述接收所述直播服务器响应于所述第二直播状态请求反馈的与所述第一标识信息匹配的直播状态信息之后,所述响应单元602具体用于:
将所述直播服务器反馈的与所述第一标识信息匹配的直播状态信息更新至所述主播状态队列;
释放所述分布式锁数据库中所述第一标识信息对应的主播数据的锁。
在一些实施例中,所述响应单元602具体用于:
响应于所述第一直播状态请求,从所述主播状态队列中查询是否存在与所述第一标识信息关联的直播内容;
若所述主播状态队列中存在与所述第一标识信息关联的直播内容,则从所述主播状态队列中获取与所述第一标识信息匹配的直播状态信息,以作为所述待同步主播的直播状态信息。
在一些实施例中,所述响应单元602具体用于:
若所述主播状态队列中存在与所述第一标识信息关联的直播内容,则检测所述主播状态队列中与所述第一标识信息关联的直播状态信息的已更新时长;
若所述已更新时长小于预设时长阈值,则从所述主播状态队列中获取与所述第一标识信息匹配的直播状态信息,以作为所述待同步主播的直播状态信息;
在一些实施例中,所述响应单元602具体用于:
若所述已更新时长大于或等于预设时长阈值,则向预设的直播服务器发起第三直播状态请求,其中,所述第三直播状态请求携带有所述第一标识信息;
接收所述直播服务器响应于所述第三直播状态请求反馈的与所述第一标识信息匹配的直播状态信息,以作为所述待同步主播的直播状态信息。
在一些实施例中,直播状态信息同步装置还包括更新单元(图中未示出),所述更新单元具体用于:
接收直播端的第一主播的开播状态通知,其中,所述开播状态通知携带有所述第一主播的第二标识信息;
响应于所述开播状态通知,从所述直播服务器获取与所述第二标识信息关联的直播状态信息更新至所述主播状态队列。
在一些实施例中,所述更新单元具体用于:
接收直播端的第二主播的关播状态通知,其中,所述关播状态通知携带有所述第二主播的第三标识信息;
响应于所述关播状态通知,将所述主播状态队列中与所述第三标识信息关联的直播状态信息移除。
在一些实施例中,所述更新单元具体用于:
当达到预设更新间隔时,向预设的直播服务器发送第四直播状态请求;
接收所述直播服务器响应于所述第四直播状态请求反馈的直播中主播的标识信息和直播状态信息;
根据所述直播中主播的标识信息和所述直播中主播的直播状态信息,更新所述主播状态队列中的直播状态信息。
在一些实施例中,所述更新单元具体用于:
基于所述直播服务器的直播状态请求量,检测所述直播服务器的当前繁忙程度;
基于所述当前繁忙程度,确定所述直播服务器中的直播状态信息更新至所述主播状态队列的间隔时长,以作为所述预设更新间隔。
在一些实施例中,直播状态信息同步装置还包括提示单元(图中未示出),所述提示单元具体用于:
检测直播端的最新开关播通知时间与当前时间的目标时间间隔;
若所述目标时间间隔大于预设时间间隔,则检测在所述目标时间间隔内所述主播状态队列是否存在主播状态变更;
若在所述目标时间间隔内所述主播状态队列存在主播状态变更,则输出所述直播端通知异常的提示信息。
由上可知,本实施例的直播状态信息同步装置可以由接收单元601接收内容流端的第一直播状态请求,其中,所述第一直播状态请求携带有待同步主播的第一标识信息;由响应单元602响应于所述第一直播状态请求,基于所述第一标识信息和预设的主播状态队列,获取所述待同步主播的直播状态信息,其中,所述主播状态队列中预缓存有各主播的直播状态信息;由同步单元603将所述待同步主播的直播状态信息发送至所述内容流端,以在所述内容流端同步所述待同步主播的直播状态信息。由此,本申请实施例,一方面,在一定程度上实现了将多个用户请求合并为一个用户请求,避免了直播服务器的资源浪费,降低了直播服务器的请求量;另一方面,即使直播服务器短暂性出现网络异常或接口调用异常,仍然可以保证直播状态信息的正常同步,保证了直播状态信息同步的高可用性。
相应的,本申请实施例还提供一种电子设备,该电子设备可以为终端,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机(PC,PersonalComputer)、个人数字助理(Personal Digital Assistant,PDA)等终端设备。如图7所示,图7为本申请实施例提供的电子设备的结构示意图。该电子设备700包括有一个或者一个以上处理核心的处理器701、有一个或一个以上计算机可读存储介质的存储器702及存储在存储器702上并可在处理器上运行的计算机程序。其中,处理器701与存储器702电性连接。本领域技术人员可以理解,图中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
处理器701是电子设备700的控制中心,利用各种接口和线路连接整个电子设备700的各个部分,通过运行或加载存储在存储器702内的软件程序和/或模块,以及调用存储在存储器702内的数据,执行电子设备700的各种功能和处理数据,从而对电子设备700进行整体监控。
在本申请实施例中,电子设备700中的处理器701会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器702中,并由处理器701来运行存储在存储器702中的应用程序,从而实现各种功能:
接收内容流端的第一直播状态请求,其中,所述第一直播状态请求携带有待同步主播的第一标识信息;
响应于所述第一直播状态请求,基于所述第一标识信息和预设的主播状态队列,获取所述待同步主播的直播状态信息,其中,所述主播状态队列中预缓存有各主播的直播状态信息;
将所述待同步主播的直播状态信息发送至所述内容流端,以在所述内容流端同步所述待同步主播的直播状态信息。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
可选的,如图7所示,电子设备700还包括:触控显示屏703、射频电路704、音频电路705、输入单元706以及电源707。其中,处理器701分别与触控显示屏703、射频电路704、音频电路705、输入单元706以及电源707电性连接。本领域技术人员可以理解,图7中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
触控显示屏703可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏703可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-Emitting Diode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器701,并能接收处理器701发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器701以确定触摸事件的类型,随后处理器701根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏703而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏703也可以作为输入单元706的一部分实现输入功能。
射频电路704可用于收发射频信号,以通过无线通信与网络设备或其他电子设备建立无线通讯,与网络设备或其他电子设备之间收发信号。
音频电路705可以用于通过扬声器、传声器提供用户与电子设备之间的音频接口。音频电路705可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路705接收后转换为音频数据,再将音频数据输出处理器701处理后,经射频电路704以发送给比如另一电子设备,或者将音频数据输出至存储器702以便进一步处理。音频电路705还可能包括耳塞插孔,以提供外设耳机与电子设备的通信。
输入单元706可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
电源707用于给电子设备700的各个部件供电。可选的,电源707可以通过电源管理系统与处理器701逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源707还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管图7中未示出,电子设备700还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
由上可知,本实施例提供的电子设备,可以接收内容流端的第一直播状态请求,其中,所述第一直播状态请求携带有待同步主播的第一标识信息;响应于所述第一直播状态请求,基于所述第一标识信息和预设的主播状态队列,获取所述待同步主播的直播状态信息,其中,所述主播状态队列中预缓存有各主播的直播状态信息;将所述待同步主播的直播状态信息发送至所述内容流端,以在所述内容流端同步所述待同步主播的直播状态信息。由此,本实施例提供的电子设备,第一方面,可以有效地将直播状态信息同步至内容流端;第二方面,由于主播状态队列预缓存了各主播的直播状态信息,因此,可以避免需针对多个内容流端(即多个用户)对同一主播的直播状态信息分别调用直播服务器接口发起查询请求,在一定程度上实现了将多个用户请求合并为一个用户请求,一方面,避免了直播服务器的资源浪费,降低了直播服务器的请求量;另一方面,即使直播服务器短暂性出现网络异常或接口调用异常,仍然可以保证直播状态信息的正常同步,保证了直播状态信息同步的高可用性。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种直播状态信息同步方法中的步骤。例如,该计算机程序可以执行如下步骤:
接收内容流端的第一直播状态请求,其中,所述第一直播状态请求携带有待同步主播的第一标识信息;
响应于所述第一直播状态请求,基于所述第一标识信息和预设的主播状态队列,获取所述待同步主播的直播状态信息,其中,所述主播状态队列中预缓存有各主播的直播状态信息;
将所述待同步主播的直播状态信息发送至所述内容流端,以在所述内容流端同步所述待同步主播的直播状态信息。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该计算机可读存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种直播状态信息同步方法中的步骤,因此,可以实现本申请实施例所提供的任一种直播状态信息同步方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种直播状态信息同步方法、装置、电子设备和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。