久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      代碼詳解使用Go基于WebSocket構(gòu)建視頻直播彈幕系統(tǒng)

      代碼詳解使用Go基于WebSocket構(gòu)建視頻直播彈幕系統(tǒng)

      (1)業(yè)務(wù)復(fù)雜度介紹

      開(kāi)門(mén)見(jiàn)山,假設(shè)一個(gè)直播間同時(shí)500W人在線,那么1秒鐘1000條彈幕,那么彈幕系統(tǒng)的推送頻率就是: 500W * 1000條/秒=50億條/秒 ,想想B站2019跨年晚會(huì)那次彈幕系統(tǒng)得是多么的NB,況且一個(gè)大型網(wǎng)站不可能只有一個(gè)直播間!

      代碼詳解使用Go基于WebSocket構(gòu)建視頻直播彈幕系統(tǒng)

      使用Go做WebSocket開(kāi)發(fā)無(wú)非就是三種情況:

      • 使用Go原生自帶的庫(kù),也就是 golang.org/x/net ,但是這個(gè)官方庫(kù)真是出了奇Bug多
      • 使用GitHub大佬 gorilla/websocket 庫(kù),可以結(jié)合到某些Web開(kāi)發(fā)框架,比如Gin、iris等,只要使用的框架式基于 golang.org/net 的,那么這個(gè)庫(kù)就可以與這個(gè)框架結(jié)合
      • 手?jǐn)]一個(gè)WebSocket框架

      相關(guān)學(xué)習(xí)推薦:Go語(yǔ)言教程

      根據(jù)估算結(jié)果,彈幕推送量很大的時(shí)候,Linux內(nèi)核將會(huì)出現(xiàn)瓶頸,因?yàn)長(zhǎng)inux內(nèi)核發(fā)送TCP包的時(shí)候極限包發(fā)送頻率是100W。因此可以將同一秒內(nèi)的彈幕消息合并為1條推送,減少網(wǎng)絡(luò)小數(shù)據(jù)包的發(fā)送,從而降低推送頻率。

      彈幕系統(tǒng)需要維護(hù)在線的用戶(hù)長(zhǎng)連接來(lái)實(shí)現(xiàn)定向推送到在線的用戶(hù),通常是使用Hash字典結(jié)構(gòu),通常推送消息就是遍歷在線用的Hash字典。在彈幕推送期間用戶(hù)在不斷的上下線,為了維護(hù)上線用戶(hù),那么就得不斷的修改Hash字典,不斷地進(jìn)行鎖操作,用戶(hù)量過(guò)大導(dǎo)致鎖瓶頸。因此可以將整個(gè)Hash結(jié)構(gòu)拆分為多個(gè)Hash結(jié)構(gòu),分別對(duì)多個(gè)Hash結(jié)構(gòu)加不同的鎖,并且使用讀寫(xiě)鎖替代互斥鎖。

      通常服務(wù)器與客戶(hù)端交互使用JSON結(jié)構(gòu),那么需要不斷的編碼解碼JSON數(shù)據(jù),這將會(huì)導(dǎo)致CPU瓶頸。將消息先進(jìn)行合并,然后進(jìn)行編碼,最后輪詢(xún)Hash結(jié)構(gòu)進(jìn)行推送。

      以上是單體架構(gòu)存在的問(wèn)題,為了支持

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)