CN109361953A - 弹幕消息的动态分发方法、装置、设备和存储介质 - Google Patents
弹幕消息的动态分发方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN109361953A CN109361953A CN201811085176.6A CN201811085176A CN109361953A CN 109361953 A CN109361953 A CN 109361953A CN 201811085176 A CN201811085176 A CN 201811085176A CN 109361953 A CN109361953 A CN 109361953A
- Authority
- CN
- China
- Prior art keywords
- distribution
- message
- event
- function
- barrage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/435—Processing of additional data, e.g. decrypting of additional data, reconstructing software from modules extracted from the transport stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
- H04L67/1008—Server selection for load balancing based on parameters of servers, e.g. available memory or workload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1029—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers using data related to the state of servers by a load balancer
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/23—Processing of content or additional data; Elementary server operations; Server middleware
- H04N21/235—Processing of additional data, e.g. scrambling of additional data or processing content descriptors
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/442—Monitoring of processes or resources, e.g. detecting the failure of a recording device, monitoring the downstream bandwidth, the number of times a movie has been viewed, the storage space available from the internal hard disk
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/442—Monitoring of processes or resources, e.g. detecting the failure of a recording device, monitoring the downstream bandwidth, the number of times a movie has been viewed, the storage space available from the internal hard disk
- H04N21/4424—Monitoring of the internal components or processes of the client device, e.g. CPU or memory load, processing speed, timer, counter or percentage of the hard disk space used
Landscapes
- Engineering & Computer Science (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Multimedia (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Information Transfer Between Computers (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种弹幕消息的动态分发方法、装置、设备和存储介质。该方法包括:在满足数据上报条件时,获取分发弹幕消息的分发压力参数值;依据所述分发压力参数值生成序列化对象,并调用事件对象中的第一字段值设置函数,将所述序列化对象存储至所述事件对象;以所述事件对象为函数输入参数,通过事件巴士对象调用事件消息投递函数,将所述事件对象发布至所述事件巴士对象对应的事件总线中,以使顶级分发对象依据所述分发压力参数值确定消息承压值,并依据所述消息承压值分发弹幕消息。通过上述技术方案,实现了弹幕消息的高效分发,且提高弹幕消息分发的容错性。
Description
技术领域
本发明实施例涉及弹幕技术,尤其涉及一种弹幕消息的动态分发方法、装置、设备和存储介质。
背景技术
在音视频播放/直播应用软件中会大量使用弹幕消息。通常,弹幕消息是由传输及处理弹幕消息的服务器(即弹幕服务器)发送至应用软件,再由应用软件中具有分发弹幕消息功能的弹幕分发模块将接收的弹幕消息分发至各个需要接收弹幕消息的弹幕接收模块。
当弹幕服务器发送的弹幕消息的量非常大时,单个弹幕分发模块的分发压力较大,会出现弹幕消息分发不及时,甚至丢失弹幕消息的问题。这种情况下,可以在应用软件内部设置多级的弹幕分发模块,例如一个顶级弹幕分发模块和多个次级弹幕分发模块,顶级弹幕分发模块将接收的弹幕消息分发给各个次级弹幕分发模块,再由次级弹幕分发模块将弹幕消息分发至各个弹幕接收模块。
上述过程中顶级弹幕分发模块是随机地或顺序地将一条弹幕消息分发至某一个次级弹幕分发模块。但是,每条弹幕消息的处理时间不均等,会使得每个次级弹幕分发模块的弹幕消息分发速度不均等,从而使得有些次级弹幕分发模块的分发压力较大,而另一些次级弹幕分发模块较为空闲,不利于弹幕消息的高效分发。
发明内容
本发明实施例提供一种弹幕消息的动态分发方法、装置、设备和存储介质,以实现弹幕消息的高效分发,且提高弹幕消息分发的容错性。
第一方面,本发明实施例提供了一种弹幕消息的动态分发方法,包括:
在满足数据上报条件时,获取分发弹幕消息的分发压力参数值;
依据所述分发压力参数值生成序列化对象,并调用事件对象中的第一字段值设置函数,将所述序列化对象存储至所述事件对象;
以所述事件对象为函数输入参数,通过事件巴士对象调用事件消息投递函数,将所述事件对象发布至所述事件巴士对象对应的事件总线中,以使顶级分发对象依据所述分发压力参数值确定消息承压值,并依据所述消息承压值分发弹幕消息。
第二方面,本发明实施例还提供了一种弹幕消息的动态分发装置,该装置包括:
参数值获取模块,用于在满足数据上报条件时,获取分发弹幕消息的分发压力参数值;
事件对象确定模块,用于依据所述分发压力参数值生成序列化对象,并调用事件对象中的第一字段值设置函数,将所述序列化对象存储至所述事件对象;
数据上报模块,用于以所述事件对象为函数输入参数,通过事件巴士对象调用事件消息投递函数,将所述事件对象发布至所述事件巴士对象对应的事件总线中,以使顶级分发对象依据所述分发压力参数值确定消息承压值,并依据所述消息承压值分发弹幕消息。
第三方面,本发明实施例还提供了一种设备,该设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的弹幕消息的动态分发方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的弹幕消息的动态分发方法。
本发明实施例通过在顶级分发对象和多个次级分发对象之间设置弹幕消息分发的负载均衡机制实现弹幕消息的高效分发。具体是通过在满足数据上报条件时,次级分发对象获取该次级分发对象的分发弹幕消息的分发压力参数值,为弹幕消息分发的负载均衡机制提供了负载计算数据。通过依据分发压力参数值生成序列化对象,简化了次级分发对象向顶级分发对象上报负载数据的形式,提高了数据上报效率。通过基于Android的发布/订阅事件总线EventBus的事件巴士对象进行次级分发对象的负载数据上报,进一步简化了次级分发对象和顶级分发对象之间的通信方式,能够快速且正确地将负载数据上报至顶级分发对象,从而使顶级分发对象确定该次级分发对象的消息承压值,并依据消息承压值分发弹幕消息,实现了弹幕消息分发过程中的负载均衡,提高了弹幕消息的分发效率和分发容错性。
附图说明
图1是本发明实施例一中的一种弹幕消息的动态分发方法的流程图;
图2是本发明实施例二中的一种弹幕消息的动态分发方法的流程图;
图3是本发明实施例三中的一种弹幕消息的动态分发装置的结构示意图;
图4是本发明实施例四中的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
本实施例提供的弹幕消息的动态分发方法可适用于Android客户端中的音视频播放/直播应用软件中的弹幕消息分发,尤其适用于在弹幕消息数量较多时的级联式弹幕消息分发。该方法可以由弹幕消息的动态分发装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在安装有基于Android系统的音视频播放/直播应用软件的设备中,例如典型的是用户终端设备,例如手机、平板电脑或智能电视等。本发明实施例中的执行主体是次级分发对象,主要说明次级分发对象收集并上报用于负载均衡的负载参数值。参见图1,本实施例的方法具体包括如下步骤:
S110、在满足数据上报条件时,获取分发弹幕消息的分发压力参数值。
其中,分发压力参数是指能够表征次级分发对象的弹幕消息分发压力的参数。分发压力参数值是指分发压力参数的值。这里次级分发对象是指对弹幕消息进行分发处理的下一层级的弹幕分发类的实例化对象。与次级分发对象相对设置的便是顶级分发对象,其是对弹幕消息进行分发处理的上一层级的弹幕分发类的实例化对象。
示例性地,分发压力参数包括历史消息承载量、当前剩余消息承载率、当前CPU空闲率和当前剩余内存容量中的至少一种。消息承载量是指次级分发对象已经存储的待分发至各个弹幕接收对象的弹幕消息(即待分发弹幕消息)的数量。历史消息承载量是指次级分发对象在本操作之前的弹幕消息分发过程中的消息承载量,其可以是设定时间段内消息承载量的最大值或均值,优选为均值,以更合理的反映该次级分发对象的分发能力。消息承载率是指次级分发对象的消息承载量与其所能承载的最大消息承载量(即消息承载总量)的百分比值。当前剩余消息承载率是指当前时刻次级分发对象的消息承载量的余量与消息承载总量的百分比值。当前CPU空闲率是指当前时刻Android客户端的系统CPU空闲率。当前剩余内存容量是指当前时刻Android客户端的系统内存的剩余容量。这样设置的好处在于可以从至少一个角度反映次级分发对象的负载情况。
具体地,次级分发对象检测到其满足数据上报条件时,便获取其内的分发压力参数值。具体的获取方式与分发压力参数有关。例如分发压力参数为历史消息承载量和/或当前剩余消息承载率,则可以通过读取系统的日志数据来获取;例如分发压力参数为当前CPU空闲率和/或当前剩余内存容量,则可以通过读取系统运行状态参数来获取。
示例性地,满足数据上报条件包括数据上报定时器的定时周期到达,或者接收到顶级分发对象的数据上报通知消息。本实施例中将次级分发对象收集分发压力参数值的触发方式设置为两种,一种是次级分发对象内部设置用于触发数据上报的定时器(即数据上报定时器),另一种是顶级分发对象向次级分发对象发送通知消息。当数据上报定时器的定时周期到达,或者接收到顶级分发对象发送的数据上报通知消息时,认为次级分发对象检测到其满足了数据上报条件。其中,顶级分发对象向次级分发对象发送数据上报通知消息的方式可以是:预先定义一个包含具有回调函数性质的消息传输函数的接口类型的消息传输协议,并使次级分发类继承该消息传输协议。然后,在次级分发对象创建时,通过调用次级分发类的构造函数实例化生成次级分发对象,该次级分发对象同时也是协议传输对象,其内包含消息传输函数。在次级分发对象创建之后,将其注册至顶级分发对象,使得顶级分发对象持有次级分发对象的引用关系,至此便构建了顶级分发对象和次级分发对象之间的消息传输通道。之后顶级分发对象通过调用次级分发对象中的消息传输函数将上述数据上报通知消息发送至次级分发对象。
S120、依据分发压力参数值生成序列化对象,并调用事件对象中的第一字段值设置函数,将序列化对象存储至事件对象。
其中,序列化对象是指存储序列化数据的对象。第一字段值设置函数是指事件对象中定义的函数,其用于为事件对象中的某一个字段赋值。
具体地,为了便于次级分发对象向顶级分发对象传输分发压力参数值,本实施例中次级分发对象将所获得的分发压力参数值封装至一个对象中,并对该对象进行序列化操作,从而生成一个序列化对象mSecondResponseStr。
为了简化次级分发对象和顶级分发对象之间的通信方式,且降低两者之间的耦合性,本实施例中采用第三方开源事件总线EventBus来实现分发压力参数值的上报。这样,就需要生成一个包含序列化对象的事件对象。为此,预先定义一个事件对象类NotificationSecondResponseStr,且使该事件对象类继承基础事件类BaseEvent,以使得上述事件对象类实例化所得的事件对象mNotificationSecondResponseStr作为一个唯一的事件进行投递。之后,以序列化对象为函数输入参数,调用事件对象的第一字段值设置函数,即mNotificationSecondResponseStr.SetSerialization(mSecondResponseStr),将序列化对象mSecondResponseStr存储至该事件对象的相应字段Serialization中。
S130、以事件对象为函数输入参数,通过事件巴士对象调用事件消息投递函数,将事件对象发布至事件巴士对象对应的事件总线中,以使顶级分发对象依据分发压力参数值确定消息承压值,并依据消息承压值分发弹幕消息。
其中,事件巴士对象是由事件总线EventBus生成的对象,其是实现事件消息投递的实际执行者。事件消息投递函数是事件巴士对象中的函数,其用于将事件对象投递至事件总线中。消息承压值是指次级分发对象当前能够承担的弹幕消息分发压力的评估值,该值越大,表明该次级分发对象当前时刻仍能接收的待分发弹幕消息的数量越多。
具体地,为了利用事件总线EventBus进行分发压力参数值的传递,还需利用事件总线EventBus中的对象创建函数getDefualt预先生成一个事件巴士对象mEvenBus。之后,次级分发对象调用该事件巴士对象mEvenBus的时间消息投递函数post(),即mEvenBus.post(mNotificationSecondResponseStr),将上述获得的事件对象投递至事件总线中。
至此事件总线中便已经有包含次级分发对象的分发压力参数值的事件对象,顶级分发对象便可以采用事件总线中事件对象接收的相应方法来接收到该事件对象,并解析出其内包含的分发压力参数值。之后,顶级分发对象根据获得的分发压力参数值来计算该次级分发对象的消息承压值,并根据该消息承压值在所有可接收弹幕消息的次级分发对象对应的所有消息承压值中的排序,来确定是否向该次级分发对象分发弹幕消息。例如顶级分发对象确定该消息承压值是所有消息承压值中的最大值,则顶级分发对象将弹幕消息分发至该次级分发对象。这里顶级分发对象分发弹幕消息的方式可以是利用上述建立的消息传输通道。
需要说明的是,上述利用事件总线EventBus进行数据上报的流程(S120中的第二分步骤和S130)可以封装为一个数据上报函数Notification,以更加便捷的函数调用过程来实现上述流程,提高程序开发效率。
本实施例的技术方案,通过在满足数据上报条件时,次级分发对象获取该次级分发对象的分发弹幕消息的分发压力参数值,为弹幕消息分发的负载均衡机制提供了负载计算数据。通过依据分发压力参数值生成序列化对象,简化了次级分发对象向顶级分发对象上报负载数据的形式,提高了数据上报效率。通过基于Android的发布/订阅事件总线EventBus的事件巴士对象进行次级分发对象的负载数据上报,进一步简化了次级分发对象和顶级分发对象之间的通信方式,能够快速且正确地将负载数据上报至顶级分发对象,从而使顶级分发对象确定该次级分发对象的消息承压值,并依据消息承压值分发弹幕消息,实现了弹幕消息分发过程中的负载均衡,提高了弹幕消息的分发效率和分发容错性。
实施例二
本实施例在上述实施例一的基础上,对“获取分发弹幕消息的分发压力参数值”进行了进一步优化。在此基础上,还可以进一步对“依据分发压力参数值生成序列化对象”进行优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图2,本实施例提供的弹幕消息的动态分发方法包括:
S201、判断是否满足数据上报条件。若否,则结束操作;若是,则执行S202。
S202、获取预先构建的弹幕消息集合的当前元素数量。
其中,弹幕消息集合是指存储待分发弹幕消息的集合,其数据结构可以是数组、列表或队列等。该弹幕消息集合是次级分发对象中的具有全局作用域的集合。
具体地,次级分发对象调用弹幕消息集合中的元素数量获取函数获得当前时刻该弹幕消息集合中的元素数量(即当前元素数量),该当前元素数量可以用于表征当前时刻次级分发对象的当前消息承载量。例如,当弹幕消息集合的数据结构为列表list时,上述过程为:次级分发对象调用弹幕消息集合secondSendList中的元素数量获取函数count(),便可获得该弹幕消息集合的当前元素数量waitNumber。
S203、依据当前元素数量和消息承载总量,确定当前剩余消息承载率。
具体地,次级分发对象可以将当前元素数量waitNumber与消息承载总量DANMU_ALL_NUMBER相除,获得一个百分比结果,用于表征该次级分发对象当前时刻已经承载的弹幕消息的占比(即消息承载率danmuPress);那么可以用(1-danmuPress)来表征该次级分发对象的当前剩余消息承载率danmuAllow。或者,次级分发对象获得消息承载总量与当前元素数量的差值,作为当前消息承载量的余量;再将当前消息承载量的余量与消息承载总量DANMU_ALL_NUMBER相除,获得一个百分比结果,作为当前剩余消息承载率danmuAllow。
示例性地,消息承载总量根据CPU工作频率和CPU核数确定,或者根据CPU工作频率、CPU核数、当前CPU占用率和当前内存占用率确定。实际应用时,消息承载总量可以根据Android客户端的CPU核数和CPU工作频率(如CPU主频)来经验性地设定一个数值,如CPU核数越多,且CPU主频越高,则消息承载总量的数值越大。消息承载总量还可以根据当前Android客户端中的硬件情况进行动态设置,如CPU核数越多,CPU主频越高,当前CPU占用率越小,且当前内存占用率越小,则将消息承载总量的数值增大;反之,则降低消息承载总量的数值。这样设置的好处在于能够根据设备的硬件情况合理设置消息承载总量的数值,从而更加合理地反映次级分发对象的负载情况。并且,此处所采用的当前CPU占用率和当前内存占用率与分发压力参数中的当前CPU空闲率和当前内存空闲率相对应,可以减少数据获取次数,提高次级分发对象的数据收集效率。
S204、通过系统运行时类调用运行时对象获取函数获取系统运行时对象,并调用系统运行时对象的命令执行函数触发执行TOP命令,获得进程对象。
具体地,次级分发对象通过获取系统运行状态信息来获取当前CPU空闲率。次级分发对象首先通过系统运行时类统Runtime调用运行时对象获取函数getRuntime,获取系统运行时对象runtime。之后,通过系统运行时对象runtime调用命令执行函数exec(“top”)来触发TOP命令的执行,返回一个系统的进程对象process。
S205、调用进程对象的输入流对象获取函数获得字节输入流对象,并依据字节输入流对象生成字符输入流对象。
具体地,次级分发对象通过上述进程对象process调用输入流对象获取函数geInputStream(),获得字节输入流对象inputStream。之后,通过调用字符输入流类InputStreamReader的构造函数将字节输入流对象inputStream转变成一个字符输入流对象mInputStreamReader。
S206、依据字符输入流对象生成字符读取对象,调用字符读取对象的行输出函数获得字符输出流对象中的首行数据,并依据首行数据确定当前CPU空闲率。
具体地,次级分发对象以上述字符输入流对象为函数输入参数,通过字符读取类BufferReader的构造函数new BufferReader(mInputStreamReader),将字符输入流对象mInputStreamReader转变成一个字符读取对象mBufferReader。之后,通过调用字符读取对象mBufferReader中的行输出函数readLine()来读取到字符输出流对象中第一行的数据信息(即首行数据),该首行数据中便包含当前CPU占用率。利用该当前CPU占用率便可获得当前CPU空闲率cpuAvai。
S207、通过系统上下文环境类调用系统服务获取函数获得活动窗口管理服务,并依据活动窗口管理服务生成活动窗口管理对象。
具体地,次级分发对象以活动窗口管理服务关键字ACTIVITY_SERVICE为函数输入参数,通过系统上下文环境类Context调用系统服务获取函数getSystemService(ACTIVITY_SERVICE),获得活动窗口管理服务。之后将该活动窗口管理服务转换为活动窗口管理对象mActivityManager。
S208、调用活动窗口管理对象的内存信息获取函数获得内存信息对象,并调用内存信息对象的可用内存获取函数,获得当前内存容量,作为当前剩余内存容量。
具体地,次级分发对象调用活动窗口管理对象mActivityManager中的内存信息获取函数MemoryInfo()获得ActivityManager.MemoryInfo类型的内存信息对象memberInfo。之后,调用内存信息对象memberInfo的可用内存获取函数availMem()获得当前内存容量memAvai,作为当前剩余内存容量。
S209、通过预先构建的反馈对象调用与分发压力参数值对应的第二字段值设置函数,将分发压力参数值存储至反馈对象,并以反馈对象为函数输入参数,调用对象序列化函数,生成序列化对象。
其中,第二字段值设置函数是指反馈对象中定义的函数,其用于为反馈对象中的字段赋值。
具体地,为了实现上述获取的各个分发压力参数值的序列化处理,本实施例中预先定义了一个信息反馈类SecondResponse,且该类的定义中根据上述各个分发压力参数设置了相应的字段值存储函数(也称为第二字段值设置函数)set*和字段值读取函数get*,这里的“*”表示相应的字段。如针对当前CPU空闲率cpuAvai字段,设置了CPU字段存储函数setAvaiCpu()和CPU字段读取函数getAvaiCpu(),同样为历史消息承载量、当前剩余消息承载率和当前剩余内存容量设置相应的字段值存储函数和字段值读取函数。
具体实施时,次级分发对象在获得上述各个分发压力参数之后,利用信息反馈类实例化生成一个反馈对象mSecondResponse。之后,分别调用反馈对象mSecondResponse中历史消息承载量、当前剩余消息承载率、当前CPU空闲率和当前剩余内存容量对应的第二字段值设置函数setAllowHisDanmu(HisdanmuAllow)、setAllowDanmu(danmuAllow)、setAvaiCpu(cpuAvai)和setAvaiMem(memAvai),将历史消息承载量、当前剩余消息承载率、当前CPU空闲率和当前剩余内存容量存储至反馈对象中。
之后,次级分发对象在判断反馈对象mSecondResponse不为空对象时,通过Java语言中提供的JavaScript对象简谱(JavaScript Object Notation,JSON)类实例化一个JSON对象,并调用该JSON对象中具有静态标识符static的对象序列化函数toJSONString(mSecondResponse),对反馈对象mSecondResponse进行序列化处理,生成反馈对象对应的字符串String类型的序列化对象。这里的对象序列化函数toJSONString()中会自动调用反馈对象中的字段值存储函数set*和字段值读取函数get*。
本实施例中的反馈对象序列化过程采用了Java语言中较为通用的JSON格式,当采用其他字符串String类型的数据格式时,需采用其对应的对象序列化函数。
S210、调用事件对象中的第一字段值设置函数,将序列化对象存储至事件对象。
S211、以事件对象为函数输入参数,通过事件巴士对象调用事件消息投递函数,将事件对象发布至事件巴士对象对应的事件总线中,以使顶级分发对象依据分发压力参数值确定消息承压值,并依据消息承压值分发弹幕消息。
需要说明的是,S202~S203、S204~S206和S207~S208分别是分发压力参数为当前剩余消息承载率、当前CPU空闲率和当前剩余内存容量对应的参数值获取步骤,而上述三种参数值的获取顺序可以任意排列,故本实施例中不限定S202~S203、S204~S206和S207~S208的执行顺序,如顺序执行、逆序执行、跳序执行或同时执行。
本实施例的技术方案,通过当前剩余消息承载率、当前CPU空闲率和当前剩余内存容量的获取,更加快速地收集了能够更加全面地反映次级分发对象负载情况的分发压力参数值,从而进一步提高了弹幕分发过程中负载均衡机制的可行性和合理性。通过采用JSON数据格式进行对象序列化处理,能够进一步提高次级分发对象的数据上报效率,从而进一步提高弹幕消息分发的高效性。
以下是本发明实施例提供的弹幕消息的动态分发装置的实施例,该装置与上述各实施例的弹幕消息的动态分发方法属于同一个发明构思,在弹幕消息的动态分发装置的实施例中未详尽描述的细节内容,可以参考上述弹幕消息的动态分发方法的实施例。
实施例三
本实施例提供一种弹幕消息的动态分发装置,参见图3,该装置具体包括:
参数值获取模块310,用于在满足数据上报条件时,获取分发弹幕消息的分发压力参数值;
事件对象确定模块320,用于依据分发压力参数值生成序列化对象,并调用事件对象中的第一字段值设置函数,将序列化对象存储至事件对象;
数据上报模块330,用于以事件对象为函数输入参数,通过事件巴士对象调用事件消息投递函数,将事件对象发布至事件巴士对象对应的事件总线中,以使顶级分发对象依据分发压力参数值确定消息承压值,并依据消息承压值分发弹幕消息。
其中,满足数据上报条件包括数据上报定时器的定时周期到达,或者接收到顶级分发对象的数据上报通知消息。
进一步地,分发压力参数包括历史消息承载量、当前剩余消息承载率、当前CPU空闲率和当前剩余内存容量中的至少一种。
可选地,参数值获取模块310具体用于:
分发压力参数为当前剩余消息承载率时,获取预先构建的弹幕消息集合的当前元素数量;
依据当前元素数量和消息承载总量,确定当前剩余消息承载率;
其中,消息承载总量根据CPU工作频率和CPU核数确定,或者根据CPU工作频率、CPU核数、当前CPU占用率和当前内存占用率确定。
可选地,参数值获取模块310具体用于:
分发压力参数为当前CPU空闲率时,通过系统运行时类调用运行时对象获取函数获取系统运行时对象,并调用系统运行时对象的命令执行函数触发执行TOP命令,获得进程对象;
调用进程对象的输入流对象获取函数获得字节输入流对象,并依据字节输入流对象生成字符输入流对象;
依据字符输入流对象生成字符读取对象,并调用字符读取对象的行输出函数获得字符输出流对象中的首行数据;
依据首行数据确定当前CPU空闲率。
可选地,参数值获取模块310具体用于:
分发压力参数为当前剩余内存容量时,通过系统上下文环境类调用系统服务获取函数获得活动窗口管理服务,并依据活动窗口管理服务生成活动窗口管理对象;
调用活动窗口管理对象的内存信息获取函数获得内存信息对象,并调用内存信息对象的可用内存获取函数,获得当前内存容量,作为当前剩余内存容量。
可选地,事件对象确定模块320具体用于:
通过预先构建的反馈对象调用与分发压力参数值对应的第二字段值设置函数,将分发压力参数值存储至反馈对象;
以反馈对象为函数输入参数,调用对象序列化函数,生成序列化对象。
通过本发明实施例三的一种弹幕消息的动态分发装置,实现了弹幕消息的高效分发,且提高了弹幕消息分发的容错性。
本发明实施例所提供的弹幕消息的动态分发装置可执行本发明任意实施例所提供的弹幕消息的动态分发方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述弹幕消息的动态分发装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
实施例四
参见图4,本实施例提供了一种设备400,其包括:一个或多个处理器420;存储装置410,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器420执行,使得一个或多个处理器420实现本发明实施例所提供的弹幕消息的动态分发方法,包括:
在满足数据上报条件时,获取分发弹幕消息的分发压力参数值;
依据分发压力参数值生成序列化对象,并调用事件对象中的第一字段值设置函数,将序列化对象存储至事件对象;
以事件对象为函数输入参数,通过事件巴士对象调用事件消息投递函数,将事件对象发布至事件巴士对象对应的事件总线中,以使顶级分发对象依据分发压力参数值确定消息承压值,并依据消息承压值分发弹幕消息。
当然,本领域技术人员可以理解,处理器420还可以实现本发明任意实施例所提供的弹幕消息的动态分发方法的技术方案。
图4显示的设备400仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图4所示,该设备400包括处理器420、存储装置410、输入装置430和输出装置440;设备中处理器420的数量可以是一个或多个,图4中以一个处理器420为例;设备中的处理器420、存储装置410、输入装置430和输出装置440可以通过总线或其他方式连接,图4中以通过总线450连接为例。
存储装置410作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的弹幕消息的动态分发方法对应的程序指令/模块(例如,弹幕消息的动态分发装置中的参数值获取模块、事件对象确定模块和数据上报模块)。
存储装置410可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置410可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置410可进一步包括相对于处理器420远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置430可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。
实施例五
本实施例提供一种包含计算机可执行指令的存储介质,计算机可执行指令在由计算机处理器执行时用于执行一种弹幕消息的动态分发方法,该方法包括:
在满足数据上报条件时,获取分发弹幕消息的分发压力参数值;
依据分发压力参数值生成序列化对象,并调用事件对象中的第一字段值设置函数,将序列化对象存储至事件对象;
以事件对象为函数输入参数,通过事件巴士对象调用事件消息投递函数,将事件对象发布至事件巴士对象对应的事件总线中,以使顶级分发对象依据分发压力参数值确定消息承压值,并依据消息承压值分发弹幕消息。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的弹幕消息的动态分发方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所提供的弹幕消息的动态分发方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种弹幕消息的动态分发方法,其特征在于,包括:
在满足数据上报条件时,获取分发弹幕消息的分发压力参数值;
依据所述分发压力参数值生成序列化对象,并调用事件对象中的第一字段值设置函数,将所述序列化对象存储至所述事件对象;
以所述事件对象为函数输入参数,通过事件巴士对象调用事件消息投递函数,将所述事件对象发布至所述事件巴士对象对应的事件总线中,以使顶级分发对象依据所述分发压力参数值确定消息承压值,并依据所述消息承压值分发弹幕消息。
2.根据权利要求1所述的方法,其特征在于,分发压力参数包括历史消息承载量、当前剩余消息承载率、当前CPU空闲率和当前剩余内存容量中的至少一种。
3.根据权利要求2所述的方法,其特征在于,所述分发压力参数为所述当前剩余消息承载率时,所述获取分发弹幕消息的分发压力参数值包括:
获取预先构建的弹幕消息集合的当前元素数量;
依据所述当前元素数量和消息承载总量,确定所述当前剩余消息承载率;
其中,所述消息承载总量根据CPU工作频率和CPU核数确定,或者根据所述CPU工作频率、所述CPU核数、当前CPU占用率和当前内存占用率确定。
4.根据权利要求2所述的方法,其特征在于,所述分发压力参数为所述当前CPU空闲率时,所述获取分发弹幕消息的分发压力参数值包括:
通过系统运行时类调用运行时对象获取函数获取系统运行时对象,并调用所述系统运行时对象的命令执行函数触发执行TOP命令,获得进程对象;
调用所述进程对象的输入流对象获取函数获得字节输入流对象,并依据所述字节输入流对象生成字符输入流对象;
依据所述字符输入流对象生成字符读取对象,并调用所述字符读取对象的行输出函数获得所述字符输出流对象中的首行数据;
依据所述首行数据确定所述当前CPU空闲率。
5.根据权利要求2所述的方法,其特征在于,所述分发压力参数为所述当前剩余内存容量时,所述获取分发弹幕消息的分发压力参数值包括:
通过系统上下文环境类调用系统服务获取函数获得活动窗口管理服务,并依据所述活动窗口管理服务生成活动窗口管理对象;
调用所述活动窗口管理对象的内存信息获取函数获得内存信息对象,并调用所述内存信息对象的可用内存获取函数,获得当前内存容量,作为所述当前剩余内存容量。
6.根据权利要求1或2所述的方法,其特征在于,所述依据所述分发压力参数值生成序列化对象包括:
通过预先构建的反馈对象调用与所述分发压力参数值对应的第二字段值设置函数,将所述分发压力参数值存储至所述反馈对象;
以所述反馈对象为函数输入参数,调用对象序列化函数,生成所述序列化对象。
7.根据权利要求1所述的方法,其特征在于,所述满足数据上报条件包括数据上报定时器的定时周期到达,或者接收到所述顶级分发对象的数据上报通知消息。
8.一种弹幕消息的动态分发装置,其特征在于,包括:
参数值获取模块,用于在满足数据上报条件时,获取分发弹幕消息的分发压力参数值;
事件对象确定模块,用于依据所述分发压力参数值生成序列化对象,并调用事件对象中的第一字段值设置函数,将所述序列化对象存储至所述事件对象;
数据上报模块,用于以所述事件对象为函数输入参数,通过事件巴士对象调用事件消息投递函数,将所述事件对象发布至所述事件巴士对象对应的事件总线中,以使顶级分发对象依据所述分发压力参数值确定消息承压值,并依据所述消息承压值分发弹幕消息。
9.一种设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的弹幕消息的动态分发方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一所述的弹幕消息的动态分发方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811085176.6A CN109361953B (zh) | 2018-09-18 | 2018-09-18 | 弹幕消息的动态分发方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811085176.6A CN109361953B (zh) | 2018-09-18 | 2018-09-18 | 弹幕消息的动态分发方法、装置、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109361953A true CN109361953A (zh) | 2019-02-19 |
CN109361953B CN109361953B (zh) | 2022-04-08 |
Family
ID=65350955
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811085176.6A Active CN109361953B (zh) | 2018-09-18 | 2018-09-18 | 弹幕消息的动态分发方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109361953B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216780A (zh) * | 2007-01-05 | 2008-07-09 | 中兴通讯股份有限公司 | 在对称多处理体系下实现多实例线程通信的方法及装置 |
CN102638402A (zh) * | 2012-03-28 | 2012-08-15 | 中兴通讯股份有限公司 | 流媒体双缓存技术中填充数据的方法及装置 |
CN104536827A (zh) * | 2015-01-27 | 2015-04-22 | 浪潮(北京)电子信息产业有限公司 | 一种数据调度方法和装置 |
CN105791166A (zh) * | 2016-04-14 | 2016-07-20 | 北京思特奇信息技术股份有限公司 | 一种负载均衡分配的方法及系统 |
CN106469165A (zh) * | 2015-08-18 | 2017-03-01 | 腾讯科技(深圳)有限公司 | 弹幕展示方法及弹幕展示装置 |
CN107783849A (zh) * | 2017-09-27 | 2018-03-09 | 武汉斗鱼网络科技有限公司 | 事件处理方法及客户端 |
CN108197912A (zh) * | 2016-12-08 | 2018-06-22 | 阿里巴巴集团控股有限公司 | 一种业务处理系统及方法 |
CN108234242A (zh) * | 2017-12-29 | 2018-06-29 | 北京奇虎科技有限公司 | 一种基于流的压力测试方法和装置 |
-
2018
- 2018-09-18 CN CN201811085176.6A patent/CN109361953B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216780A (zh) * | 2007-01-05 | 2008-07-09 | 中兴通讯股份有限公司 | 在对称多处理体系下实现多实例线程通信的方法及装置 |
CN102638402A (zh) * | 2012-03-28 | 2012-08-15 | 中兴通讯股份有限公司 | 流媒体双缓存技术中填充数据的方法及装置 |
CN104536827A (zh) * | 2015-01-27 | 2015-04-22 | 浪潮(北京)电子信息产业有限公司 | 一种数据调度方法和装置 |
CN106469165A (zh) * | 2015-08-18 | 2017-03-01 | 腾讯科技(深圳)有限公司 | 弹幕展示方法及弹幕展示装置 |
CN105791166A (zh) * | 2016-04-14 | 2016-07-20 | 北京思特奇信息技术股份有限公司 | 一种负载均衡分配的方法及系统 |
CN108197912A (zh) * | 2016-12-08 | 2018-06-22 | 阿里巴巴集团控股有限公司 | 一种业务处理系统及方法 |
CN107783849A (zh) * | 2017-09-27 | 2018-03-09 | 武汉斗鱼网络科技有限公司 | 事件处理方法及客户端 |
CN108234242A (zh) * | 2017-12-29 | 2018-06-29 | 北京奇虎科技有限公司 | 一种基于流的压力测试方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109361953B (zh) | 2022-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110633442A (zh) | 一种推送方法、装置及电子设备 | |
CN105376317A (zh) | 负载均衡的控制方法及装置 | |
CN109413502B (zh) | 多线程弹幕消息分发方法、装置、设备及存储介质 | |
CN111367693B (zh) | 基于消息队列调度插件任务的方法、系统、设备及介质 | |
CN110535928B (zh) | 一种区块链的java智能合约的事件推送方法 | |
CN111200606A (zh) | 深度学习模型任务处理方法、系统、服务器及存储介质 | |
CN110096379A (zh) | 基于通用协议的消息分发方法、装置、设备及存储介质 | |
CN115550354A (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
CN108882053A (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109062650B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN112398752B (zh) | 消息推送控制方法及其装置、设备、介质 | |
CN109101340B (zh) | 弹幕消息的动态分发方法、装置、设备和存储介质 | |
CN111813529B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN113064740A (zh) | 一种消息处理方法和装置 | |
CN108810645B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109361953A (zh) | 弹幕消息的动态分发方法、装置、设备和存储介质 | |
CN109089163B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN108924653B (zh) | 弹幕消息分发方法、装置、设备和存储介质 | |
CN109274988B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN111475315A (zh) | 服务器及订阅通知推送控制、执行方法 | |
CN109005448B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109302723A (zh) | 一种基于互联网的多节点实时无线电监测控制系统及控制方法 | |
CN108810644B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109086107B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109379605B (zh) | 基于弹幕顺序的弹幕分发方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |