国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

workerman接收大量數(shù)據(jù)的問題

blue1018

現(xiàn)在有一個程序,接收大量的數(shù)據(jù) ,并且用一個進(jìn)程進(jìn)行較耗時的處理。我想問,處理過程中,買沒接收的數(shù)據(jù)存在哪呢,會不會因為數(shù)據(jù)量太大,導(dǎo)致數(shù)據(jù)丟失了?

4981 3 0
3個回答

walkor 打賞

發(fā)送的數(shù)據(jù)在socket緩沖區(qū),如果緩沖區(qū)滿了,會有兩種類情況,
1、客戶端是阻塞寫,則寫操作會發(fā)生阻塞,也就是客戶端會等待socket緩沖區(qū)有空閑時繼續(xù)寫入,如果socket緩沖區(qū)長時間沒有空閑,可能會返回超時錯誤,超時時間由寫入時的參數(shù)決定。超時后如何處理由客戶端業(yè)務(wù)邏輯決定,選擇等一會兒在寫,或者放棄,放棄的話數(shù)據(jù)可能就沒了
2、客戶端是非阻塞寫,則返回一個錯誤碼,客戶端通過錯誤碼能知道是socket緩沖區(qū)滿,這時后客戶端可以選擇等一會兒在寫,或者放棄,放棄的話數(shù)據(jù)可能就沒了

所以情況不一定

  • blue1018 2018-09-07

    我使用的是Channel,組件,是不是這屬于第二種情況?如果這樣我想加大緩沖區(qū)防止數(shù)據(jù)丟失,下面這樣做合適嗎,
    TcpConnection::$defaultMaxSendBufferSize = 210241024;
    $channel_server = new Channel\Server('0.0.0.0', Main::$CONFIG["CHANNEL_PORT"]);
    if (!defined('GLOBAL_START')) {
    Worker::runAll();
    }

blue1018

我補充一下我的問題,
我的應(yīng)用,有進(jìn)程A負(fù)責(zé)接收數(shù)據(jù),然后通過Channel,發(fā)送給進(jìn)程B
進(jìn)程B處理速度慢,數(shù)據(jù)就會在ChannelServer的緩沖區(qū)里吧?
為了防止丟失,我該增加ChannelServer鏈接的緩存區(qū),這樣處理可以嗎?

  • 暫無評論
walkor 打賞

增加緩沖區(qū)也不能保證100%沒問題,因為緩沖區(qū)還是有滿的可能

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??