第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

你能檢測出客戶端跟上 websocket 消息流的情況嗎?

你能檢測出客戶端跟上 websocket 消息流的情況嗎?

Go
慕容3067478 2022-01-11 16:08:01
我正在編寫一個視頻流服務,并且正在考慮通過 websockets 流式傳輸視頻。我預見的一個問題是客戶端沒有足夠的帶寬來接收流,所以我希望能夠檢測我是否比我的客戶端領先太多,并將消息降低到較低的幀速率或質量。您能否檢測到龍卷風何時發(fā)送過多而客戶端無法接收?
查看完整描述

1 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

您不必擔心網(wǎng)絡速度慢;但是您確實必須擔心快速的網(wǎng)絡。


您將無法向網(wǎng)絡寫入比客戶端能夠接受的更多的數(shù)據(jù)。所以你不會領先。


假設您正在分塊閱讀和發(fā)送視頻。您的代碼可能如下所示:


while True:

    self.write(chunk)

    await self.flush() # write chunk to network

該await self.flush()語句將暫停循環(huán),直到塊被寫入網(wǎng)絡。因此,如果它是一個慢速網(wǎng)絡,它將暫停更長時間。如您所見,您不必擔心遠遠領先于客戶。


但是,如果您的客戶端的網(wǎng)絡很快,那么flush操作也會非常快,這可能會阻塞您的服務器,因為此循環(huán)將繼續(xù)運行,直到所有數(shù)據(jù)都發(fā)送完畢,并且 IOLoop 將沒有機會為其他客戶端提供服務。


對于這些情況,tornado 的維護者 Ben Darnell 在google 論壇帖子中提供了一個非常聰明的解決方案,他稱之為:


以“公平”的速率為每個客戶端提供服務,而不是讓單個客戶端消耗盡可能多的帶寬。


這是代碼(直接取自 Ben Darnell 的帖子):


while True:

    # Start the clock to ensure a steady maximum rate

    deadline = IOLoop.current().time() + 0.1


    # Read a 1MB chunk

    self.write(chunk)


    await self.flush()


    # This sleep will be instant if the deadline has already passed;

    # otherwise we'll sleep long enough to keep the transfer

    # rate around 10MB/sec (adjust the numbers above as needed

    # for your desired transfer rate)


    await gen.sleep(deadline)

現(xiàn)在,即使flush操作很快,在下一條語句中,循環(huán)也會休眠到最后期限,從而允許服務器為其他客戶端提供服務。


查看完整回答
反對 回復 2022-01-11
  • 1 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號