CN110971920B - 一种消息的降级方法及相关装置 - Google Patents
一种消息的降级方法及相关装置 Download PDFInfo
- Publication number
- CN110971920B CN110971920B CN201811159796.XA CN201811159796A CN110971920B CN 110971920 B CN110971920 B CN 110971920B CN 201811159796 A CN201811159796 A CN 201811159796A CN 110971920 B CN110971920 B CN 110971920B
- Authority
- CN
- China
- Prior art keywords
- message
- use information
- time
- cpu
- current
- 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.)
- Active
Links
Images
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/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/21—Server components or server architectures
- H04N21/218—Source of audio or video content, e.g. local disk arrays
- H04N21/2187—Live feed
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3006—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- 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
- 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/443—OS processes, e.g. booting an STB, implementing a Java virtual machine in an STB or power management in an STB
-
- 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/47—End-user applications
- H04N21/478—Supplemental services, e.g. displaying phone caller identification, shopping application
- H04N21/4788—Supplemental services, e.g. displaying phone caller identification, shopping application communicating with other users, e.g. chatting
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Signal Processing (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例公开了一种消息的降级方法及相关装置,用于根据用户设备的实际情况来降级以提高降级效率。本发明实施例方法包括:在预置时长内,定期获取客户端当前的内存使用信息和当前的中央处理器CPU使用信息;根据当前的内存使用信息和当前的CPU使用信息,分别获取预置时长内的平均内存使用信息和平均CPU使用信息;将平均内存使用信息和平均CPU使用信息发送给服务器;接收服务器发送的第一阈值,第一阈值由服务器根据平均内存使用信息和平均CPU使用信息获得;当接收到消息时,将接收到消息的时刻存储到时刻队列中,时刻队列用于存储接收消息的时刻;判断时刻队列中存储的时刻数量是否超过第一阈值;若超过,则根据消息的类型对消息进行降级处理。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种消息的降级方法及相关装置。
背景技术
对于直播平台来说,在一个房间内的所有观众是可以看到该直播间的所有弹幕消息和礼物消息。然而对于大直播间由于消息过多导致移动端的设备的发热,以及性能消耗,会产生卡顿现象。因此在移动端对收到的弹幕和礼物进行降级则很有必要。
现有技术中,依据当前时刻设置来统计弹幕数量,并将在阈值内的弹幕存入队列中,超过数量则丢弃掉。
然而现有技术中,在弹幕量多的时候,给用户的表现是一会是没有弹幕了,即超过阈值后丢弃所有弹幕,一会是收到一大堆弹幕,即当超过时间阈值后可以开始收弹幕。故现有技术中,不是一种平滑的弹幕数量的降级控制,给用户的表现效果不好;同时由于此种做法是在应用层的显示层进行弹幕数量的控制,因此对整个系统的性能也会有一定的消耗。
因此如何在减少系统性能消耗的同时,能够在弹幕量多的时候平滑过渡以给用户好的表现效果,是一个急需解决的问题。
发明内容
本发明实施例提供了一种消息的降级方法及相关装置,用于根据用户设备的实际情况来降级以提高降级效率。
本发明实施例的第一方面提供了一种消息的降级方法,包括:在预置时长内,定期获取客户端当前的内存使用信息和当前的中央处理器CPU使用信息;根据所述当前的内存使用信息和当前的CPU使用信息,分别获取所述预置时长内的平均内存使用信息和平均CPU使用信息;将所述平均内存使用信息和平均CPU使用信息发送给服务器;接收所述服务器发送的第一阈值,所述第一阈值由所述服务器根据所述平均内存使用信息和平均CPU使用信息获得;当接收到消息时,将接收到所述消息的时刻存储到时刻队列中,所述时刻队列用于存储接收消息的时刻;判断所述时刻队列中存储的时刻数量是否超过所述第一阈值;若超过,则根据所述消息的类型对所述消息进行降级处理。
在一种可能的实施例中,所述在预置时长内,定期获取客户端当前的内存使用信息和当前的CPU使用信息包括:定义内存对象以获取当前的内存使用信息;定义CPU对象以获取当前的CPU使用信息;设置定时器定期采用所述预置时长内所述当前的内存使用信息和所述当前的CPU使用信息。
在一种可能的实施例中,所述定义内存对象以获取当前的内存信息:定义系统类Runtime对象,并调用get函数runtime=Runtime.getRuntime()对所述Runtime对象进行赋值;在所述系统类Runtime对象中,通过接口maxMemory获取总系统内存大小,通过接口freeMemory获取空闲系统内存大小;根据所述总系统内存大小和所述空闲系统内存大小确定当前的内存使用信息。
在一种可能的实施例中,所述定义CPU对象以获取当前的CPU使用信息包括:定义系统类Runtime对象,并调用get函数runtime=Runtime.getRuntime()对所述Runtime对象进行赋值;通过string函数String[]CPUusage=CPUusr[0].split(“user”)获取用户CPU使用信息,通过String[]SYSusage=CPUuser[1].split(“System”)获取系统CPU使用信息;根据所述用户CPU使用信息和所述系统CPU使用信息获得所述当前的CPU使用信息。
在一种可能的实施例中,所述第一阈值包括弹幕消息阈值和/或礼物消息阈值。
在一种可能的实施例中,当所述第一阈值包括所述弹幕消息阈值,所述消息的类型为弹幕消息时,所述根据所述消息的类型对所述消息进行降级处理包括:在所述时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;通过删除接口DeleteOlderTime删除所述目标弹幕消息。
在一种可能的实施例中,当所述第一阈值包括所述礼物消息阈值,所述消息的类型为礼物消息时,所述根据所述消息的类型对所述消息进行降级处理包括:根据所述礼物消息的等级信息判断所述礼物消息的等级是否大于预设等级;若不大于,则存储所述礼物消息的连击次数,并丢弃所述礼物消息。
本发明实施例的第二方面提供了一种降级装置,包括:获取单元,用于在预置时长内,定期获取客户端当前的内存使用信息和当前的中央处理器CPU使用信息;根据所述当前的内存使用信息和当前的CPU使用信息,分别获取所述预置时长内的平均内存使用信息和平均CPU使用信息;收发单元,用于将所述平均内存使用信息和平均CPU使用信息发送给服务器;接收所述服务器发送的第一阈值,所述第一阈值由所述服务器根据所述平均内存使用信息和平均CPU使用信息获得;存储单元,用于当接收到消息时,将接收到所述消息的时刻存储到时刻队列中,所述时刻队列用于存储接收消息的时刻;判断单元,用于判断所述时刻队列中存储的时刻数量是否超过所述第一阈值;降级单元,用于若超过,则根据所述消息的类型对所述消息进行降级处理。
本发明第三方面提供了一种电子设备,包括存储器、处理器,其特征在于,所述处理器用于执行存储器中存储的计算机管理类程序时实现如上述任意一项所述的获取数据的方法的步骤。
本发明第四方面提供了一种计算机可读存储介质,其上存储有计算机管理类程序,其特征在于:所述计算机管理类程序被处理器执行时实现如上述任意一项所述的获取数据的方法的步骤。
从以上技术方案可以看出,本发明实施例具有以下优点:在预置时长内,定期获取客户端当前的内存使用信息和当前的中央处理器CPU使用信息;根据所述当前的内存使用信息和当前的CPU使用信息,分别获取所述预置时长内的平均内存使用信息和平均CPU使用信息;将所述平均内存使用信息和平均CPU使用信息发送给服务器;接收所述服务器发送的第一阈值,所述第一阈值由所述服务器根据所述平均内存使用信息和平均CPU使用信息获得;当接收到消息时,将接收到所述消息的时刻存储到时刻队列中,所述时刻队列用于存储接收消息的时刻;判断所述时刻队列中存储的时刻数量是否超过所述第一阈值;若超过,则根据所述消息的类型对所述消息进行降级处理。本申请实施例中,客户端获取到了服务器下发的阈值后,则依据阈值来对消息进行降级,从而是依据每个客户端当前的内存使用情况和CPU使用情况来进行的降级,而并不是所有客户端都使用同一套值,因此定制化的降级更能依据用户设备的实际情况来降级,效果更好。
附图说明
图1为本发明实施例提供的一种可能的消息的降级方法的流程图;
图2为本发明实施例提供的一种可能的降级装置的结构示意图;
图3为本发明实施例提供的一种可能的电子设备的硬件结构示意图;
图4为本发明实施例提供的一种可能的计算机可读存储介质的硬件结构示意图。
具体实施方式
本发明实施例提供了一种消息的降级方法及相关装置,用于根据用户设备的实际情况来降级以提高降级效率。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,现有技术中,所有弹幕或者礼物降级的方法都是对所有设备所有时刻都是使用相同的阈值,并没有依据实际情况来对消息进行降级。例如对于iphoneX来说设置阈值为每秒100条弹幕消息,则阈值过于小了,因iphoneX性能完全可以胜任200条;而对于iphone4则可能只能承受50条弹幕。同样的,对于Android的设备也存在这样一种情况。因此,如果依据用户的设备来设置阈值,那么由于市面上设备种类非常之多,必须收集全所有的设备,而且对于iphone设备来说,即使是同一个设备,其所安装的系统版本,其性能也是不一样的。另外,对于同一个设备来说,即使系统相同,其当前接收弹幕的阈值也并不能设置的一样,因此对于用户使用设备来说,依据其当前的中央处理器(central processingunit,CPU)使用率和内存使用率才是能够满足用户的实际情况。因此,本申请实施例中,可以依据用户当前实际的CPU使用情况和内存使用情况来动态的调整阈值,从而依据CPU和内存情况比较能真实的反映出用户的设备使用情况,同时也不需要去收集所有的设备类型。基于此,请参阅图1,为本发明实施例提供的一种消息的降级方法的流程图,具体包括:
101、在预置时长内,定期获取客户端当前的内存使用信息和当前的CPU使用信息;
为实现在预置时长内,定期获取客户端当前的内存使用信息和当前的中央处理器CPU使用信息,本申请实施例中,需要编写功能分别实现获取客户端当前的内存使用信息和当前的CPU使用信息,并设置定时器来在预置时长内,定期获取该当前的内存使用信息和当前的CPU使用信息。具体的实现方法如下所示:
1、编写功能获取当前的内存。
首先定义一个Android系统下的系统类Runtime对象Runtime runtime;然后调用系统函数来对对象进行赋值,具体函数实现如:runtime=Runtime.getRuntime();其中,对于Runtime类可以通过一些接口获取到当前内存的使用情况和总的内存。具体地,通过接口maxMemory来获取总的系统内存大小totalSize,long totalSize=runtime.maxMemory()>>10;然后获取系统当前没有被使用的内存大小long freesize=runtime.freeMemory()。获得了总的内存大小和空闲内存大小后,可以得到当前使用了多少内存以及内存使用率,具体地,Long usageSize=(runtime.totalMemory()-runtime.freeMemory())>>10;通过该函数得到了当前使用的内存,因此内存的使用率可以通过公式LongmemoryUsageRate=usageSize*100/totalSize获取,其中memoryUsageRate用于表示内存使用率。
2、编写功能获取当前的CPU使用情况。
对于系统CPU的使用情况,可以通过执行系统的命令来从命令返回的结果中获取到对应的数据。首先定义一个Android系统下的系统类Runtime对象Runtime runtime;然后调用系统函数来对对象进行赋值,具体函数实现如下:runtime=Runtime.getRuntime();然后调用其执行命令的接口来获取系统情况,Process p=runtime exec("top-n 1"),并将结果赋值给变量p。接下来再定义一个读取结果的对象,具体函数实现包括:BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream())),则实现了从中得到CPU的其他数据。并根据string函数分别获取用户使用的CPU和系统使用的CPU,具体的,通过函数String[]CPUusage=CPUusr[0].split("User")得到用户使用的CPU,用CPUusage表示,通过函数String[]SYSusage=CPUusr[1].split("System")得到系统使用的CPU,用SYSusage表示。在得到系统使用的CPU和用户使用的CPU后,就可以得到总的CPU使用情况,即CPUusage+SYSusage。
3、设置定时器定期采集预置时长如1分钟内的内存和CPU使用情况。
需要说明的是,每次获取的使用情况是当前时刻的,为了更为平稳和准确,则需要进行采用一段时间内的使用情况,从而比较准确的反映当前的真实情况。因此本申请实施例中,可以设置一个定时器来在一分钟内定期的进行采样,通过采样来得到最终的CPU使用情况和内存使用情况。其中则可以调用系统函数SetTimer,来设置定时器每隔5秒钟调用一次Check函数,例如SetTimer(Check(),5)。
102、根据当前的内存使用信息和当前的CPU使用信息,分别获取预置时长内的平均内存使用信息和平均CPU使用信息;
在预置时长内,定期获取客户端当前的内存使用信息和当前的CPU使用信息后,通过Check函数获取到当前的内存使用信息和当前的CPU使用信息,并将多次次获取的结果进行平均得到预置时长内的平均内存使用信息和平均CPU使用信息。
103、将平均内存使用信息和平均CPU使用信息发送给服务器;
客户端在得到平均内存使用信息和平均CPU使用信息后,可通过调用http的get函数向服务器发送平均内存使用信息和平均CPU使用信息。
需要说明的是,客户端在进直播间观看时,会从服务器请求直播间的相关信息,包括直播间的视频流地址,房间内的贵族信息等和该直播间主播相关的一些信息等。即客户端通过调用http的get函数向服务器发送直播间请求消息,其中,该直播间请求消息用于请求直播间信息,直播间请求消息包括直播间的域名信息和所述直播间的房间号信息,可选的,该直播间请求消息还可包括平均内存使用信息和平均CPU使用信息。
具体地,首先定义一个http对象:http objhttp;然后填入直播间请求消息的域名url信息和参数信息,例如直播间请求消息的域名url信息可以如下:
Objhttp.url=https://douyu.dz11.com/info?roomid=342;
其中url中包含了直播平台的域名信息,以及该直播间的房间号roomid=342。
在得到该http对象后,通过调用http的get函数,例如调用函数Objhttp.get()来将请求发送给直播平台服务器。
104、接收服务器发送的第一阈值;
本申请实施例中,为了更好的考虑动态变化性,同时也可以应对实时调整策略,例如在直播平台观看直播间时的弹幕降级,服务器返回该直播间信息时还加入一个弹幕阈值和/或礼物消息阈值,所述弹幕阈值或者礼物消息阈值用于指示预定时长内接收弹幕消息或者礼物消息的最大数值,为便于描述本申请实施例中,将该弹幕阈值和/或礼物消息阈值称为第一阈值。为便于理解,本申请实施例中,该第一阈值为整数数值DanmuLimit,此值用于给到客户端每秒钟接收弹幕消息或者礼物消息的数量。客户端编写的每秒中的第一阈值是从服务器下发过来的,从而可以实现服务器随时依据当前情况进行调整,而客户端并不需要发布新的版本。同时还可以支持对于不同的直播间采取不同的阈值,更加灵活高效。
具体的,对应与步骤103中客户端通过调用http的get方法来将直播间请求消息发送给直播平台服务器,则客户端通过http返回的数据得到服务器发送的直播间信息,该直播间信息包括第一阈值,例如第一阈值等于100,即表示每秒钟最多收到100条弹幕消息或者礼物消息,因此将其赋值给DanmuLimit=100。
即客户端获取到了客户端的平均内存使用信息和平均CPU使用信息后,并将其上报到服务器,服务器则可以依据上报的信息,通过get函数来下发对应的每秒钟客户端展示的弹幕阈值和/或礼物阈值,并且服务器可以依据使用情况来动态调整阈值,从而可以最终得到一个比较合理的阈值。
105、将接收到消息的时刻存储到时刻队列中;
当接收到消息时,客户端将接收到消息的时刻存储到时刻队列中,时刻队列用于存储接收消息的时刻。
本申请实施例中,客户端还会设计一个时刻队列来存储收到消息的时刻,实际应用中可以选取STL容器的list容器作为该时刻队列的数据结构,以实现高效的存入和删除,具体函数实现如下:
std::list<uint64_t>m_item_times;
需要说明的是,本申请实施例中,时刻队列存储的是收到消息的时刻,所以其存储的是一个时间的整数值,该时刻的类型是uint64_t。另外,为存储服务器下发的DanmuLimit阈值,客户端还需要定义一个存储阈值的成员变量size_t m_nLimit,即m_nLimit=DanmuLimit。
106、确定时刻队列中存储的时刻数量超过第一阈值;
需要说明的是,客户端还需设计弹幕消息降级类的接口信息,函数表现为boolCheck();此接口Check用于收到消息后,确定当前是否消息达到了第一阈值,如果没有则返回值为true,说明可以进行展示消息;如果达到了第一阈值,则返回值是false,说明不能存储消息了。
首先调用系统函数nowtime获取当前时刻并存储到now变量中,具体函数表示可以如下:
bool Check(){
uint64_t now=(uint64_t)nowtime();
通过调用if函数,如果小于m_nLimit则说明没有达到第一阈值,还可以存储当前时刻,那再调用list的push_back来存储当前时刻now到队列中。并且返回true;说明当前可以展示该条消息,具体函数表示可以如下:
if(m_item_times.size()<m_nLimit){
m_item_times.push_back(now);};
需要说明的是,客户端还需要判断当前时刻和队列最开头的时刻是否小于1的阈值,如果超过则返回false,即if((now-m_item_times.front())<=1000)urn false;},则返回false,其中1000表示1000毫秒也即是1秒。
107、根据消息的类型对消息进行降级处理。
当时刻队列中存储的时刻数量超过第一阈值时,根据消息的类型对消息进行降级处理。
需要说明的是,本申请实施例中,消息的类型可以为弹幕消息和礼物消息。
①当消息的类型为弹幕消息时,根据消息的类型对消息进行降级处理包括以下方式:
检查时刻队列中是否存在接收时刻与当前时刻的时间差大于预定时长如1秒钟的弹幕消息,若存在,则该接收时刻对应的弹幕消息为目标弹幕消息。客户端在时刻队列中确定目标弹幕消息后,接下来设计从时刻队列中删除掉所有的超过预定时长如1秒钟阈值的时刻。本申请实施例中,通过删除接口DeleteOlderTime删除该目标弹幕消息,此删除接口则会从时刻队列开头获取每一个时刻值与参数time即当前时刻来进行比较,看看其是否大于1秒钟,如果大于则删除掉该时刻值,否则不做任何操作。具体函数表现为:voidDeleteOlderTime(uint64_t_time)。
需要说明的是,通过删除接口DeleteOlderTime删除目标弹幕消息,接下来则需要去实现此删除接口,以将时刻队列中所有时刻超过了1秒钟的时刻值删除掉。具体的,通过编写循环来遍历时刻队列。首先定义一个迭代器std::list<uint64_t>::iterator iter;然后对迭代器进行赋值为队列的起始iter=m_item_times.begin();接下来编写for循环来遍历,通过if函数判断时刻队列中的时刻与当前时刻的差值是否大于阈值1000毫秒,如果是则将其从时刻队列中删除掉,否则队列开头的时刻小于阈值则中断循环,直接返回。具体函数实现如下:
for(iter!=m_item_times.end();){
if((time-(*iter))>1000)
iter=m_item_times.erase(iter);
},其中,iter!=m_item_times.end()表示遍历的时刻是否是队列结尾。
②当消息的类型为礼物消息时,根据消息的类型对消息进行降级处理包括以下方式:
当客户端确定时刻队列中存储的时刻数量超过第一阈值时,解析接收到的消息为礼物消息并获取礼物消息的等级信息,具体实现如下:
需要说明的是,在礼物消息中有字段表明礼物消息的类型和礼物消息的等级。那么客户端在进行降级时,则需要考虑降级低等级的礼物,而对于高等级的礼物则尽量的都展示,从而不会影响用户观看。同时本身低等级的礼物数量也会偏多,而高等级的礼物数目则会偏少。为便于理解,设现有礼物消息如下:
type@=dgb/rid@=229346/giftype@=824/uid@=34135589/nn@=布拉克斯/ic@=avatar@S034@S13@S55@S89_avatar/eid@=0/level@=16/dw@=0/gfcnt@=1/hits@=6/bcnt@=6/bst@=2/ct@=0/el@=/bl@=5/brid@=78561/fc@=0/
其中type@=dgb表示是一条礼物消息,rid@=229346则表示直播间的房间号,giftype@=824则表示礼物的类型,nn@=布拉克斯则表示送礼物的用户的昵称,level@=16则表示礼物的等级等其他的字段信息,具体此处不再一一赘述。
那么则需要对此条礼物消息进行解析,从而获取其中需要的各个字段信息。
首先创建一个消息解析类SttDecoder的实例对象:SttDecoder*pDecoder=newSttDecoder();然后对收到的消息进行解析,pDecoder->Parse(NetMessage);其中NetMessage则表示收到的一条网络消息;解析后获取该条消息的消息类型,std::stringcmdtype=std::string(pDecoder->GetItem("type")),其中获取消息字段的type值表示其消息的类型。
通过if函数判断是否是礼物消息,若是礼物消息,则解析其他字段,如通过get函数获取礼物等级level和礼物类型giftype;若不是礼物消息,则直接返回。具体函数实现如下:
If(cmdtype==“dgb”){
Level=pDecoder->GetItemAsInt(“level”)
giftype=pDecoder->GetItemAsInt(“giftype”)
}
Else{
};
其中,dgb用于表示是一条礼物消息。
再根据礼物消息的等级信息确定该礼物消息的等级不大于预设等级;并、存储礼物消息的连击次数,并丢弃所述礼物消息。具体实现如下:
在获得礼物消息的等级信息后,根据该等级信息判断礼物消息的等级是否大于预设等级,例如,本申请实施例中,该预设等级可以为5级,3级等,具体此处不做限定。
具体的,根据礼物消息的等级信息对礼物消息的等级进行判断,如果礼物消息的等级大于预设级别例如5级则说明是一个高等级的礼物消息,而对于高等级礼物消息不需要进行降级,则可以直接给应用层展示,如果低层级则需要进行降级,例如通过if函数If(level>5){return true;},如果level大于5,则返回true,反之,则返回false。
另外,还需要依据消息giftype类型来存储消息的连击数目。
首先定义一个迭代器stl::map<int,int>::iterator itr;然后对迭代器进行初始化,Itr=gifTypeTimes.find(giftype);其次调用查找方法来查找此消息类型,然后对此消息类型进行加1表示又收到了一条此消息,Itr.second++,从而实现了消息类型连击数目的增加。
在底层收到礼物消息后,需要将当前连击数目推送给应用层。因此需要增加一个接口来获取对应消息的连击数目。在底层收到礼物消息后,需要将当前连击数目推送给应用层。因此需要增加一个GetGiftypeNum接口来获取所有消息的连击数目:
int GetGiftypeNum(int giftype){
首先定义一个迭代器itr:
stl::map<int,int>::iterator itr;
然后通过map容器的find方法来查找对应的消息类型。
itr=gifTypeTimes.find(giftype);
如果没有查找到则返回连击数目为0:
if(itr==gifTypeTimes.end()){
return 0;
}
如果查找到则返回连击数目:
else{
return itr.second;
}
}。
因此,客户端获得该礼物消息的连击次数后,存储该礼物消息的连击次数,并丢弃该礼物消息。
本申请实施例中,客户端获取到了服务器下发的阈值后,则依据阈值来对消息和礼物进行降级,从而是依据每个客户端当前的内存使用情况和CPU使用情况来进行的降级,而并不是所有客户端都使用同一套值,因此定制化的降级更能依据用户设备的实际情况来降级,效果更好。
另外,在图1所示的实施例中是对弹幕进行丢弃从而减少同一时刻客户端弹幕量的展示,以提高客户端的性能。而在有些情况下是客户端接收弹幕时,可能会存在一会有很多弹幕,一会弹幕量又比较少。而客户端如果在弹幕量很多的情况下,将超过阈值数量的弹幕直接丢弃掉,那么对于一些弹幕用户则观看不到,从而容易让用户误认为是弹幕服务器存在问题,同时一会弹幕多,过一会弹幕少的时候又没有弹幕可以进行显示。基于此本实施例则设计了一个新的方案,即满足在同一时刻不会同时展示大量弹幕,同时又不会丢弃掉弹幕,并且在后续弹幕量少时还可以展示之前的弹幕内容。本实施例的思路则是对收到的所有弹幕都放入到弹幕队列中。而推送给应用层的展示时则控制每一秒种的推送数量,而弹幕多时也推送一定数量,从而剩余的弹幕则会在后续弹幕量少的时候进行展示。具体的设计步骤如下所示:
1、从服务器获取客户端每秒钟显示弹幕的阈值。
该步骤与图1所示的实施例中的步骤104中描述的获取第一阈值的方式类似,此处不再赘述。
2、客户端封装一个弹幕消息存储的类。
为了更好的设计和编码,本实施例中,采用C++编程语言,来将整个消息降级的功能封装到一个C++的类中,从而可以提供成一个通用的功能。实现更好的代码复用和逻辑的封装。具体实现如下:
定义一个类名为MessageQueue类:Class MessageQueue{
本实施例中会设计一个队列来存储收到弹幕消息。为了高效的存入和删除,则选取STL容器的list容器做为队列的数据结构,例如std::list<string>m_item_times;另外,由于存储的弹幕消息是一条字符串,所以其存储的是一个string对象,因此类型是string。
接着对于弹幕消息队列为了防止多线程操作,造成队列数据污染,所以需要加入锁来进行多线程的同步互斥。那么定义一个Mutex write_mutex;互斥变量,同时后续需要编写网队列中存储弹幕消息的接口和从队列中取出弹幕消息的接口。
3、客户端编写弹幕消息队列类的存入接口。
在编写了一个弹幕消息队列后,消息队列需要编写存入弹幕消息的接口。并且对于消息队列可能存在多个线程对其进行操作,因此也需要编写线程安全的接口函数,具体如下:
Void WriteDanmuMessage(string strDanmu){
首先则定义一个自动锁对象ScopedLock lock,然后其传入本实施例定义的互斥变量write_mutex,并且该锁在函数执行完成时则会自动进行释放:ScopedLock lock(write_mutex);
然后调用list的接口push_back来将任务存入到队列的尾端:lst_buffer.push_back(strDanmu);}。
4、客户端编写弹幕消息降级类的删除接口。
另外,在编写了一个弹幕消息队列后,则弹幕消息队列需要编写取出弹幕消息的接口,并且对于消息队列可能存在多个线程对其进行操作,所以也需要编写线程安全的接口函数,具体函数实现如下:
string ReadDanmuMessage(){
首先则定义一个自动锁对象ScopedLock lock,然后其传入本文定义的互斥变量write_mutex。并且其锁在函数执行完成时则会自动进行释放:ScopedLock lock(write_mutex);
然后从队列中取出队列头部的一个弹幕消息strDanmu:string strDanmu=lst_buffer.front();接着则调用接口pop_front将队列头部的弹幕消息删除掉:lst_buffer.pop_front();然后返回取出的弹幕消息:Return strDanmu;}。
5、客户端创建控制弹幕每秒钟显示的数量。
本实施例中,客户端会控制每秒钟显示的弹幕数量,并且会将收到的所有弹幕存储到弹幕消息队列中,如果当前弹幕量比较大时则只显示部分弹幕,超过数量的弹幕则在后面进行显示。本实施例中则编写一个弹幕控制类来控制弹幕的数量,具体实现如下:
客户端定义一个类名为MessageLimit类,例如,Class DanmuLimit{;同时,客户端设计一个队列来存储收到弹幕消息的时刻。为了高效的存入和删除本实施例则选取STL容器的list容器做为队列的数据结构,例如std::list<uint64_t>m_item_times;可以理解的是,由于存储的是收到弹幕消息的时刻,因此存储的是一个时间的整数值,类型可以是uint64_t。
需要说明的是,本实施例还会涉及另一个时间队列,具体函数可以表示为:std::list<uint64_t>m_item_times2;当第一个队列存储的时间个数超过阈值时,此时则存入不了那么多弹幕消息,此时多余的则存储到第二个队列中。并且当第一个队列数量少于阈值时,会自动将第二个队列的数据补充到第一个队列中,从而展示剩余的弹幕。
另外,还需要定义一个存储阈值的成员变量size_t m_nLimit,其用来存储服务器下发的DanmuLimit阈值,即m_nLimit=DanmuLimit;
6、客户端设计弹幕消息降级类的接口信息。
需要说明的是,客户端还需设计弹幕消息降级类的接口信息,函数表现为boolCheck();此接口Check用于收到弹幕消息后,确定当前是否弹幕消息达到了阈值,如果没有则返回值为true,说明可以进行展示弹幕;如果达到了阈值,则返回值是false,说明不能存储弹幕消息了。
首先我们调用系统函数nowtime获取当前时刻并存储到now变量中,具体函数表示可以如下:
bool Check(){
uint64_t now=(uint64_t)nowtime();
通过调用if函数,如果小于m_nLimit则说明没有达到最大阈值,还可以存储当前时刻,那再调用list的push_back来存储当前时刻now到第一个队列中。并且返回true;说明当前可以展示该条弹幕内容,具体函数表示可以如下:
if(m_item_times.size()<m_nLimit){
m_item_times.push_back(now);};
需要说明的是,客户端还需要判断当前时刻和第一个队列最开头的时刻是否小于1的阈值,如果超过则返回false,即if((now-m_item_times.front())<=1000)urnfalse;},则返回false,其中1000表示1000毫秒也即是1秒。而当返回值是false时,需要将其存储到第二个队列中,具体函数实现如下:m_item_times2.push_back(now)。
7、客户端从队列中删除掉所有的超过1秒钟阈值的时刻。
需要说明的是,通过删除接口DeleteOlderTime删除超过1秒钟阈值的时刻对应的弹幕消息,接下来则需要去实现此删除接口,以将第一个队列中所有时刻超过了1秒钟的时刻值删除掉。具体的,通过编写循环来遍历第一个队列。首先定义一个迭代器std::list<uint64_t>::iterator iter;然后对迭代器进行赋值为队列的起始iter=m_item_times.begin();接下来编写for循环来遍历,通过if函数判断时刻队列中的时刻与当前时刻的差值是否大于阈值1000毫秒即1秒,如果是则将其从第一个队列中删除掉,否则第一个队列开头的时刻小于阈值则中断循环,直接返回。具体函数实现如下:
for(iter!=m_item_times.end();){
if((time-(*iter))>1000)
iter=m_item_times.erase(iter);
},其中,iter!=m_item_times.end()表示遍历的时刻是否是队列结尾。
当进行删除完成后,需要判断第一个队列中的数目,如果小于阈值,则需要从第二个队列中补充弹幕数据到第一个队列中,从而保障多余的弹幕可以进行显示不会丢弃掉。
对于控制类返回结果是可以显示弹幕时,则会将弹幕消息队列中的弹幕推送到应用层进行展示,同时对于推送过的弹幕并将其从弹幕消息队列中删除掉。
上面从消息的降级方法的角度对本发明实施例进行了描述,下面从降级取装置的角度对本发明实施例进行描述。
请参阅图2,图2为本发明实施例提供的一种可能的降级装置的实施例示意图,其中,该降级装置具体包括:
获取单元201,用于在预置时长内,定期获取客户端当前的内存使用信息和当前的中央处理器CPU使用信息;根据所述当前的内存使用信息和当前的CPU使用信息,分别获取所述预置时长内的平均内存使用信息和平均CPU使用信息;
收发单元202,用于将所述平均内存使用信息和平均CPU使用信息发送给服务器;接收所述服务器发送的第一阈值,所述第一阈值由所述服务器根据所述平均内存使用信息和平均CPU使用信息获得;
存储单元203,用于当接收到消息时,将接收到所述消息的时刻存储到时刻队列中,所述时刻队列用于存储接收消息的时刻;
判断单元204,用于判断所述时刻队列中存储的时刻数量是否超过所述第一阈值;
降级单元205,用于若超过,则根据所述消息的类型对所述消息进行降级处理。
本申请实施例中,客户端获取到了服务器下发的阈值后,则依据阈值来对消息和礼物进行降级,从而是依据每个客户端当前的内存使用情况和CPU使用情况来进行的降级,而并不是所有客户端都使用同一套值,因此定制化的降级更能依据用户设备的实际情况来降级,效果更好。
请参阅图3,图3为本发明实施例提供的电子设备的实施例示意图。
如图3所示,本发明实施例提供了一种电子设备,包括存储器310、处理器320及存储在存储器320上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时实现以下步骤:在预置时长内,定期获取客户端当前的内存使用信息和当前的中央处理器CPU使用信息;根据所述当前的内存使用信息和当前的CPU使用信息,分别获取所述预置时长内的平均内存使用信息和平均CPU使用信息;将所述平均内存使用信息和平均CPU使用信息发送给服务器;接收所述服务器发送的第一阈值,所述第一阈值由所述服务器根据所述平均内存使用信息和平均CPU使用信息获得;当接收到消息时,将接收到所述消息的时刻存储到时刻队列中,所述时刻队列用于存储接收消息的时刻;判断所述时刻队列中存储的时刻数量是否超过所述第一阈值;若超过,则根据所述消息的类型对所述消息进行降级处理。
可选的,在一种可能的实施例中,所述处理器320具体用于:定义内存对象以获取当前的内存使用信息;定义CPU对象以获取当前的CPU使用信息;设置定时器定期采用所述预置时长内所述当前的内存使用信息和所述当前的CPU使用信息。
可选的,在一种可能的实施例中,所述处理器320具体用于:定义系统类Runtime对象,并调用get函数runtime=Runtime.getRuntime()对所述Runtime对象进行赋值;在所述系统类Runtime对象中,通过接口maxMemory获取总系统内存大小,通过接口freeMemory获取空闲系统内存大小;根据所述总系统内存大小和所述空闲系统内存大小确定当前的内存使用信息。
可选的,在一种可能的实施例中,所述处理器320具体用于:定义系统类Runtime对象,并调用get函数runtime=Runtime.getRuntime()对所述Runtime对象进行赋值;通过string函数String[]CPUusage=CPUusr[0].split(“user”)获取用户CPU使用信息,通过String[]SYSusage=CPUuser[1].split(“System”)获取系统CPU使用信息;根据所述用户CPU使用信息和所述系统CPU使用信息获得所述当前的CPU使用信息。
可选的,在一种可能的实施例中,所述处理器320具体用于:在所述时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;通过删除接口DeleteOlderTime删除所述目标弹幕消息。
可选的,在一种可能的实施例中,所述处理器320还用于:根据所述礼物消息的等级信息判断所述礼物消息的等级是否大于预设等级;若不大于,则存储所述礼物消息的连击次数,并丢弃所述礼物消息。
由于本实施例所介绍的电子设备为实施本发明实施例中一种获取装置所采用的设备,故而基于本发明实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本发明实施例中的方法不再详细介绍,只要本领域所属技术人员实施本发明实施例中的方法所采用的设备,都属于本发明所欲保护的范围。
请参阅图4,图4为本发明实施例提供的一种计算机可读存储介质的实施例示意图。
如图4所示,本实施例提供了一种计算机可读存储介质400,其上存储有计算机程序411,该计算机程序411被处理器执行时实现如下步骤:在预置时长内,定期获取客户端当前的内存使用信息和当前的中央处理器CPU使用信息;根据所述当前的内存使用信息和当前的CPU使用信息,分别获取所述预置时长内的平均内存使用信息和平均CPU使用信息;将所述平均内存使用信息和平均CPU使用信息发送给服务器;接收所述服务器发送的第一阈值,所述第一阈值由所述服务器根据所述平均内存使用信息和平均CPU使用信息获得;当接收到消息时,将接收到所述消息的时刻存储到时刻队列中,所述时刻队列用于存储接收消息的时刻;判断所述时刻队列中存储的时刻数量是否超过所述第一阈值;若超过,则根据所述消息的类型对所述消息进行降级处理。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:定义内存对象以获取当前的内存使用信息;定义CPU对象以获取当前的CPU使用信息;设置定时器定期采用所述预置时长内所述当前的内存使用信息和所述当前的CPU使用信息。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:定义系统类Runtime对象,并调用get函数runtime=Runtime.getRuntime()对所述Runtime对象进行赋值;在所述系统类Runtime对象中,通过接口maxMemory获取总系统内存大小,通过接口freeMemory获取空闲系统内存大小;根据所述总系统内存大小和所述空闲系统内存大小确定当前的内存使用信息。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:定义系统类Runtime对象,并调用get函数runtime=Runtime.getRuntime()对所述Runtime对象进行赋值;通过string函数String[]CPUusage=CPUusr[0].split(“user”)获取用户CPU使用信息,通过String[]SYSusage=CPUuser[1].split(“System”)获取系统CPU使用信息;根据所述用户CPU使用信息和所述系统CPU使用信息获得所述当前的CPU使用信息。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:在所述时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;通过删除接口DeleteOlderTime删除所述目标弹幕消息。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时还用于实现如下步骤:根据所述礼物消息的等级信息判断所述礼物消息的等级是否大于预设等级;若不大于,则存储所述礼物消息的连击次数,并丢弃所述礼物消息。
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
Claims (7)
1.一种消息的降级方法,其特征在于,包括:
在预置时长内,定期获取客户端当前的内存使用信息和当前的中央处理器CPU使用信息;
根据所述当前的内存使用信息和当前的CPU使用信息,分别获取所述预置时长内的平均内存使用信息和平均CPU使用信息;
将所述平均内存使用信息和平均CPU使用信息发送给服务器;
接收所述服务器发送的第一阈值,所述第一阈值由所述服务器根据所述平均内存使用信息和平均CPU使用信息获得;所述第一阈值包括弹幕消息阈值和/或礼物消息阈值,所述服务器根据所述平均内存使用信息和平均CPU使用信息,通过get函数来下发对应的每秒钟客户端展示的弹幕阈值和/或礼物阈值,并且所述服务器可以依据使用情况来动态调整阈值;
当接收到消息时,将接收到所述消息的时刻存储到时刻队列中,所述时刻队列用于存储接收消息的时刻;
判断所述时刻队列中存储的时刻数量是否超过所述第一阈值;
若超过,则根据所述消息的类型对所述消息进行降级处理;
当所述第一阈值包括所述弹幕消息阈值,所述消息的类型为弹幕消息时,所述根据所述消息的类型对所述消息进行降级处理包括:在所述时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于预定时长;通过删除接口DeleteOlderTime删除所述目标弹幕消息;
当所述第一阈值包括所述礼物消息阈值,所述消息的类型为礼物消息时,所述根据所述消息的类型对所述消息进行降级处理包括:根据所述礼物消息的等级信息判断所述礼物消息的等级是否大于预设等级;若不大于,则存储所述礼物消息的连击次数,并丢弃所述礼物消息。
2.根据权利要求1所述的方法,其特征在于,所述在预置时长内,定期获取客户端当前的内存使用信息和当前的CPU使用信息包括:
定义内存对象以获取当前的内存使用信息;
定义CPU对象以获取当前的CPU使用信息;
设置定时器定期采用所述预置时长内所述当前的内存使用信息和所述当前的CPU使用信息。
3.根据权利要求2所述的方法,其特征在于,所述定义内存对象以获取当前的内存信息:
定义系统类Runtime对象,并调用get函数runtime=Runtime.getRuntime()对所述Runtime对象进行赋值;
在所述系统类Runtime对象中,通过接口maxMemory获取总系统内存大小,通过接口freeMemory获取空闲系统内存大小;
根据所述总系统内存大小和所述空闲系统内存大小确定当前的内存使用信息。
4.根据权利要求2所述的方法,其特征在于,所述定义CPU对象以获取当前的CPU使用信息包括:
定义系统类Runtime对象,并调用get函数runtime=Runtime.getRuntime()对所述Runtime对象进行赋值;
通过string函数String[]CPUusage=CPUusr[0].split(“user”)获取用户CPU使用信息,通过String[]SYSusage=CPUuser[1].split(“System”)获取系统CPU使用信息;
根据所述用户CPU使用信息和所述系统CPU使用信息获得所述当前的CPU使用信息。
5.一种降级装置,其特征在于,包括:
获取单元,用于在预置时长内,定期获取客户端当前的内存使用信息和当前的中央处理器CPU使用信息;根据所述当前的内存使用信息和当前的CPU使用信息,分别获取所述预置时长内的平均内存使用信息和平均CPU使用信息;
收发单元,用于将所述平均内存使用信息和平均CPU使用信息发送给服务器;接收所述服务器发送的第一阈值,所述第一阈值由所述服务器根据所述平均内存使用信息和平均CPU使用信息获得;所述第一阈值包括弹幕消息阈值和/或礼物消息阈值,所述服务器根据所述平均内存使用信息和平均CPU使用信息,通过get函数来下发对应的每秒钟客户端展示的弹幕阈值和/或礼物阈值,并且所述服务器可以依据使用情况来动态调整阈值;
存储单元,用于当接收到消息时,将接收到所述消息的时刻存储到时刻队列中,所述时刻队列用于存储接收消息的时刻;
判断单元,用于判断所述时刻队列中存储的时刻数量是否超过所述第一阈值;
降级单元,用于若超过,则根据所述消息的类型对所述消息进行降级处理;
所述装置还用于:
当所述第一阈值包括所述弹幕消息阈值,所述消息的类型为弹幕消息时,所述根据所述消息的类型对所述消息进行降级处理包括:在所述时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于预定时长;通过删除接口DeleteOlderTime删除所述目标弹幕消息;
当所述第一阈值包括所述礼物消息阈值,所述消息的类型为礼物消息时,所述根据所述消息的类型对所述消息进行降级处理包括:根据所述礼物消息的等级信息判断所述礼物消息的等级是否大于预设等级;若不大于,则存储所述礼物消息的连击次数,并丢弃所述礼物消息。
6.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-4任意一项所述的方法。
7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如权利要求1-4任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811159796.XA CN110971920B (zh) | 2018-09-30 | 2018-09-30 | 一种消息的降级方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811159796.XA CN110971920B (zh) | 2018-09-30 | 2018-09-30 | 一种消息的降级方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110971920A CN110971920A (zh) | 2020-04-07 |
CN110971920B true CN110971920B (zh) | 2021-11-26 |
Family
ID=70028966
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811159796.XA Active CN110971920B (zh) | 2018-09-30 | 2018-09-30 | 一种消息的降级方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110971920B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111787362A (zh) * | 2020-06-18 | 2020-10-16 | 北京字节跳动网络技术有限公司 | 一种消息处理方法及装置 |
CN113296942B (zh) * | 2021-05-13 | 2023-05-16 | 广州博冠信息科技有限公司 | 消息调节方法、消息调节装置、存储介质及电子设备 |
CN115767163A (zh) * | 2022-10-14 | 2023-03-07 | 北京奇艺世纪科技有限公司 | 一种弹幕展示方法、装置及电子设备 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009157127A1 (ja) * | 2008-06-25 | 2009-12-30 | パナソニック株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
CN104837201A (zh) * | 2015-02-05 | 2015-08-12 | 大唐移动通信设备有限公司 | 一种寻呼消息处理方法及设备 |
CN106471793A (zh) * | 2014-06-01 | 2017-03-01 | 苹果公司 | 在即时消息应用程序中显示选项、指定通知、忽略消息和同时用户界面显示 |
CN107295090A (zh) * | 2017-06-30 | 2017-10-24 | 北京奇艺世纪科技有限公司 | 一种资源调度的方法和装置 |
CN107302489A (zh) * | 2017-06-02 | 2017-10-27 | 北京潘达互娱科技有限公司 | 消息展示方法及装置 |
CN107547416A (zh) * | 2016-06-28 | 2018-01-05 | 中兴通讯股份有限公司 | 一种协议报文的处理方法及装置 |
CN107968802A (zh) * | 2016-10-19 | 2018-04-27 | 华为技术有限公司 | 一种资源调度的方法、装置和过滤式调度器 |
CN108011860A (zh) * | 2016-10-28 | 2018-05-08 | 华为技术有限公司 | 一种处理广播消息的方法及装置 |
CN108174305A (zh) * | 2016-12-07 | 2018-06-15 | 北京云中融信网络科技有限公司 | 直播聊天室的消息处理方法及装置 |
CN108243346A (zh) * | 2018-01-09 | 2018-07-03 | 武汉斗鱼网络科技有限公司 | 一种过滤弹幕信息的方法、服务器及计算机设备 |
CN108334227A (zh) * | 2015-08-10 | 2018-07-27 | 苹果公司 | 用于删除内容的方法、设备、介质和装置 |
CN108415780A (zh) * | 2018-01-25 | 2018-08-17 | 阿里巴巴集团控股有限公司 | 一种信息展示方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6248915B2 (ja) * | 2014-12-08 | 2017-12-20 | コニカミノルタ株式会社 | 情報処理装置、その制御方法、プログラム、および画像処理システム |
US11625738B2 (en) * | 2016-08-28 | 2023-04-11 | Vmware, Inc. | Methods and systems that generated resource-provision bids in an automated resource-exchange system |
-
2018
- 2018-09-30 CN CN201811159796.XA patent/CN110971920B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009157127A1 (ja) * | 2008-06-25 | 2009-12-30 | パナソニック株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
CN106471793A (zh) * | 2014-06-01 | 2017-03-01 | 苹果公司 | 在即时消息应用程序中显示选项、指定通知、忽略消息和同时用户界面显示 |
CN104837201A (zh) * | 2015-02-05 | 2015-08-12 | 大唐移动通信设备有限公司 | 一种寻呼消息处理方法及设备 |
CN108334227A (zh) * | 2015-08-10 | 2018-07-27 | 苹果公司 | 用于删除内容的方法、设备、介质和装置 |
CN107547416A (zh) * | 2016-06-28 | 2018-01-05 | 中兴通讯股份有限公司 | 一种协议报文的处理方法及装置 |
CN107968802A (zh) * | 2016-10-19 | 2018-04-27 | 华为技术有限公司 | 一种资源调度的方法、装置和过滤式调度器 |
CN108011860A (zh) * | 2016-10-28 | 2018-05-08 | 华为技术有限公司 | 一种处理广播消息的方法及装置 |
CN108174305A (zh) * | 2016-12-07 | 2018-06-15 | 北京云中融信网络科技有限公司 | 直播聊天室的消息处理方法及装置 |
CN107302489A (zh) * | 2017-06-02 | 2017-10-27 | 北京潘达互娱科技有限公司 | 消息展示方法及装置 |
CN107295090A (zh) * | 2017-06-30 | 2017-10-24 | 北京奇艺世纪科技有限公司 | 一种资源调度的方法和装置 |
CN108243346A (zh) * | 2018-01-09 | 2018-07-03 | 武汉斗鱼网络科技有限公司 | 一种过滤弹幕信息的方法、服务器及计算机设备 |
CN108415780A (zh) * | 2018-01-25 | 2018-08-17 | 阿里巴巴集团控股有限公司 | 一种信息展示方法和装置 |
Non-Patent Citations (2)
Title |
---|
"直播平台的相关技术";夏天/isummer;《博客园》;20161004;全文 * |
"有效进行直播平台的弹幕管理";李金兰;《有线电视技术》;20170315;第105-107页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110971920A (zh) | 2020-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110968279B (zh) | 一种消息的降级方法及相关装置 | |
CN110971920B (zh) | 一种消息的降级方法及相关装置 | |
KR102161817B1 (ko) | 유휴 시간 소프트웨어 가비지 콜렉션 | |
CN111159436B (zh) | 一种推荐多媒体内容的方法、装置及计算设备 | |
CN102932679B (zh) | 一种网络视频预览系统和方法 | |
CN112051993B (zh) | 状态机模板的生成及任务处理方法、装置、介质及设备 | |
US20110307623A1 (en) | Smooth streaming client component | |
CN109766253B (zh) | 一种性能数据发送方法、装置、计算机设备及存储介质 | |
US20140019986A1 (en) | Managing multi-threaded operations in a multimedia authoring environment | |
CN104503887A (zh) | 计算设备状态展示方法及装置 | |
CN104850318B (zh) | 瞬时消息显示控制的方法及设备 | |
CN111083217A (zh) | 一种推送Feed流的方法、装置及电子设备 | |
CN110971919B (zh) | 一种弹幕消息的降级方法及相关装置 | |
CN109587511A (zh) | 多设备视频直播方法、设备、系统及存储介质 | |
US9690859B2 (en) | Transmitting information based on reading speed | |
CN109471989A (zh) | 一种页面请求处理方法及相关装置 | |
EP2175589A1 (en) | Content control method and device | |
CN110971921B (zh) | 一种礼物消息的降级方法及相关装置 | |
CN111327941B (zh) | 一种离线视频播放方法、装置、设备及介质 | |
CN108121602B (zh) | 一种确定垃圾收集触发点的方法、电子设备及存储介质 | |
US9971683B1 (en) | Automatic computer memory management coordination across a group of servers | |
CN110955502A (zh) | 一种任务调度方法及装置 | |
CN115563423A (zh) | 数据采集方法、装置、计算机设备及存储介质 | |
CN106998436A (zh) | 录像备份方法及装置 | |
CN112584237A (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 |