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

onBufferFull被調(diào)用后,怎么停止send???

luckyrin

手冊原文:
**每個連接都有一個單獨的應用層發(fā)送緩沖區(qū),緩沖區(qū)大小由TcpConnection::$maxSendBufferSize決定,默認值為1MB,可以手動設置更改大小,更改后會對所有連接生效。

該回調(diào)在應用層發(fā)送緩沖區(qū)數(shù)據(jù)全部發(fā)送完畢后觸發(fā)。一般與onBufferFull配合使用,例如在onBufferFull時停止向?qū)Χ死^續(xù)send數(shù)據(jù),在onBufferDrain恢復寫入數(shù)據(jù)。**

具體怎么實現(xiàn)以上邏輯????

4035 1 0
1個回答

walkor 打賞

停止send邏輯要自己想,各個場景方法可能不一樣。

比如發(fā)現(xiàn)onBufferFull了,給這個連接弄個緩沖區(qū)已滿的標識,當要給這個連接send數(shù)據(jù)前,判斷下這個標記,如果標記為滿不再調(diào)用send發(fā)送,而是把數(shù)據(jù)者保存在磁盤里(或者直接丟棄),等onBufferDrain時從磁盤中讀取,然后再send給對方。
有點類似這個例子:
http://wenda.workerman.net/question/869
再比如workerman作為tcp代理時,A->Workerman->B這種,當B的緩沖區(qū)onBufferFull時,可以利用pauseRecv停止對A的讀,這樣不會再有數(shù)據(jù)發(fā)送給B,也就不會調(diào)用send。

這個可以參考workerman的 http://doc.workerman.net/tcp-connection/pipe.html 寫法,
Workerman/Connection/TcpConnection.php

public function pipe($dest)
{
    $source              = $this;
    $this->onMessage     = function ($source, $data) use ($dest) {
        $dest->send($data);
    };
    $this->onClose       = function ($source) use ($dest) {
        $dest->destroy();
    };
    $dest->onBufferFull  = function ($dest) use ($source) {
        $source->pauseRecv();
    };
    $dest->onBufferDrain = function ($dest) use ($source) {
        $source->resumeRecv();
    };
}
  • luckyrin 2016-04-01

    多謝指點!我好好研究研究!

年代過于久遠,無法發(fā)表回答
??