国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

基于asyncio異步協(xié)程框架實(shí)現(xiàn)收集B站直播彈幕詳細(xì)介紹

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:24:45
文檔

基于asyncio異步協(xié)程框架實(shí)現(xiàn)收集B站直播彈幕詳細(xì)介紹

基于asyncio異步協(xié)程框架實(shí)現(xiàn)收集B站直播彈幕詳細(xì)介紹:本文給大家分享的是基于asyncio 異步協(xié)程http://www.gxlcms.com/css/css-rwd-frameworks.html target=_blank
推薦度:
導(dǎo)讀基于asyncio異步協(xié)程框架實(shí)現(xiàn)收集B站直播彈幕詳細(xì)介紹:本文給大家分享的是基于asyncio 異步協(xié)程http://www.gxlcms.com/css/css-rwd-frameworks.html target=_blank

本文給大家分享的是基于asyncio 異步協(xié)程http://www.gxlcms.com/css/css-rwd-frameworks.html" target="_blank">框架實(shí)現(xiàn)收集B站直播彈幕收集系統(tǒng)的簡(jiǎn)單設(shè)計(jì),并附上源碼,有需要的小伙伴可以參考下

">

前言

雖然標(biāo)題是全站,但目前只做了等級(jí) top 100 直播間的全天彈幕收集。

彈幕收集系統(tǒng)基于之前的B 站直播彈幕姬 Python 版修改而來(lái)。具體協(xié)議分析可以看上一篇文章。

直播彈幕協(xié)議是直接基于 TCP 協(xié)議,所以如果 B 站對(duì)類似我這種行為做反制措施,比較困難。應(yīng)該有我不知道的技術(shù)手段來(lái)檢測(cè)類似我這種惡意行為。

我試過(guò)同時(shí)連接 100 個(gè)房間,和連接單個(gè)房間 100 次的實(shí)驗(yàn),都沒(méi)有問(wèn)題。>150 會(huì)被關(guān)閉鏈接。

直播間的選取

現(xiàn)在彈幕收集系統(tǒng)在選取直播間上比較簡(jiǎn)單,直接選取了等級(jí) top100。

以后會(huì)修改這部分,改成定時(shí)去 http://live.bilibili.com/all 查看新開(kāi)播的直播間,并動(dòng)態(tài)添加任務(wù)。

異步任務(wù)和彈幕存儲(chǔ)

收集系統(tǒng)仍舊使用了 asyncio 異步協(xié)程框架,對(duì)于每一個(gè)直播間都使用如下方法來(lái)加進(jìn) loop 中。

danmuji = bilibiliClient(url, self.lock, self.commentq, self.numq)
task1 = asyncio.ensure_future(danmuji.connectServer())
task2 = asyncio.ensure_future(danmuji.HeartbeatLoop())

其實(shí)若將心跳任務(wù) HeartbeatLoop 放入 connectorServer 中去啟動(dòng),代碼看起來(lái)更優(yōu)雅一些。但這么做是因?yàn)槲倚枰S護(hù)一個(gè)任務(wù)列表,后面會(huì)有描述。

在彈幕存儲(chǔ)上我花了些時(shí)間選擇。

數(shù)據(jù)庫(kù)存儲(chǔ)是一個(gè)同步 IO 的過(guò)程,Insert 的時(shí)候會(huì)阻塞彈幕收集的任務(wù)。雖然有 aiomysql 這種異步接口,但配置數(shù)據(jù)庫(kù)太麻煩,我的設(shè)想是這個(gè)小系統(tǒng)能夠方便地部署。

最終我選擇使用自帶的 sqlite3。但 sqlite3 無(wú)法做并行操作,故開(kāi)了一個(gè)線程單獨(dú)進(jìn)行數(shù)據(jù)庫(kù)存儲(chǔ)。在另一個(gè)線程中,100 * 2 個(gè)任務(wù)搜集所有的彈幕、人數(shù)信息,并塞進(jìn)隊(duì)列 commentq, numq 中。存儲(chǔ)線程每隔 10s 喚醒一次,將隊(duì)列中的數(shù)據(jù)寫進(jìn) sqlite3 中,并清空隊(duì)列。

在多線程和異步的配合下,網(wǎng)絡(luò)流量沒(méi)有被阻塞。

可能的連接失敗場(chǎng)景處理

彈幕協(xié)議是直接基于 TCP,位與位直接關(guān)聯(lián)性較強(qiáng),一旦解析錯(cuò)誤,很容易就拋 Exception(個(gè)人感覺(jué),雖然 TCP 是可靠傳輸,但B站服務(wù)器自身發(fā)生錯(cuò)誤也是有可能的)。所以有必要設(shè)計(jì)一個(gè)自動(dòng)重連機(jī)制。

在 asyncio 文檔中提到,

Done means either that a result / exception are available, or that the future was cancelled.

函數(shù)正常返回、拋出異常或者是被 cancel,都會(huì)退出當(dāng)前任務(wù)。可以使用 done() 來(lái)判斷。

每一個(gè)直播間對(duì)應(yīng)兩個(gè)任務(wù),解析任務(wù)是最容易掛的,但并不會(huì)影響心跳任務(wù),所以必須找出并將對(duì)應(yīng)心跳任務(wù)結(jié)束。
在創(chuàng)建任務(wù)的時(shí)候使用字典記錄每個(gè)房間的兩個(gè)任務(wù),

self.tasks[url] = [task1, task2]

在運(yùn)行過(guò)程中,每隔 10s 做一次檢查,

for url in self.tasks:
 item = self.tasks[url]
 task1 = item[0]
 task2 = item[1]
 if task1.done() == True or task2.done() == True:
 if task1.done() == False:
 task1.cancel()
 if task2.done() == False:
 task2.cancel()
 danmuji = bilibiliClient(url, self.lock, self.commentq, self.numq)
 task11 = asyncio.ensure_future(danmuji.connectServer())
 task22 = asyncio.ensure_future(danmuji.HeartbeatLoop())
 self.tasks[url] = [task11, task22]

實(shí)際我只見(jiàn)過(guò)一次任務(wù)失敗的場(chǎng)景,是因?yàn)橹鞑シ块g被封了,導(dǎo)致無(wú)法進(jìn)入直播間。

結(jié)論

  1. B站人數(shù)是按照連接彈幕服務(wù)器的鏈接數(shù)量統(tǒng)計(jì)的。通過(guò)操縱鏈接量,可以瞬間增加任意人數(shù)觀看,有商機(jī)?

  2. 運(yùn)行的這幾天中,發(fā)現(xiàn)即使大部分房間不在直播,也能有 >5 的人數(shù),包括凌晨。我只能猜測(cè)也有和我一樣的人在 24h 收集彈幕。

  3. top100 平均一天 40M 彈幕數(shù)據(jù)。

  4. 收集的彈幕能做什么?還沒(méi)想好,可能可以拿來(lái)做用戶行為分析 -_^

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

基于asyncio異步協(xié)程框架實(shí)現(xiàn)收集B站直播彈幕詳細(xì)介紹

基于asyncio異步協(xié)程框架實(shí)現(xiàn)收集B站直播彈幕詳細(xì)介紹:本文給大家分享的是基于asyncio 異步協(xié)程http://www.gxlcms.com/css/css-rwd-frameworks.html target=_blank
推薦度:
標(biāo)簽: 直播 彈幕 介紹
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产69精品久久 | 亚洲成人一区在线 | 久久久国产这里有的是精品 | 欧美日韩视频一区二区三区 | 日本一区二区三区免费观看 | 一区二区三区在线 | 国产1区2区在线观看 | 在线免费黄色网址 | 久久伊人一区二区三区四区 | 国产va在线视频观看 | 亚洲国产精品久久久久666 | 欧美色欧美亚洲另类 | 欧美亚洲国产日韩一区二区三区 | 久久精品国产99久久99久久久 | 亚欧色| 亚洲永久精品一区二区三区 | 香蕉久久一区二区不卡无毒影院 | 欧美精品啪啪 | 日韩午夜视频在线观看 | 在线观看国产 | 劲爆欧美色欧美 | 看全色黄大色大片免费久久 | 国产真实乱人视频在线看 | 国产欧美日韩一区二区三区 | 久久久一区二区三区 | 91免费视频观看 | 国产成人不卡亚洲精品91 | 国产色综合久久无码有码 | 久久国产一区二区 | 一级成人a毛片免费播放 | 精品国产一区二区三区成人 | 亚洲精品不卡久久久久久 | 精品国产日韩亚洲一区二区 | 日本一区二区三区在线播放 | 国内精品一区二区三区 | 日韩在线视频免费观看 | 国产欧美综合在线观看第七页 | 国产精品视频观看 | 亚洲第一区视频在线观看 | 欧美日韩高清在线观看一区二区 | 国内精品久久久久久久aa护士 |