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

workerman源碼讀取socket數(shù)據(jù)

zhaocong

TcpConnection.php 文件中,baseRead方法中
讀取socket代碼如下:
$buffer = @fread($socket, self::READ_BUFFER_SIZE);

前后代碼中并沒有看到 while() 之類的驗(yàn)證數(shù)據(jù)讀取完之類的代碼。
假如把上述代碼改為每次讀取10個(gè)字節(jié) $buffer = @fread($socket, 10);

請(qǐng)問是怎么樣的機(jī)制保證每次從socket 讀取完數(shù)據(jù)的?
然道這個(gè)和event loop 處理事件 中設(shè)置的 \Event::PERSIST參數(shù)有關(guān)嗎?

\Event::PERSIST 的解釋如下:
如果一個(gè)事件被設(shè)置了EV_PERSIST,那么這個(gè)事件就是持續(xù)化的,意思就是這個(gè)事件會(huì)保持掛起狀態(tài),即使回調(diào)函數(shù)被執(zhí)行。

3967 7 0
7個(gè)回答

maq

是的,執(zhí)行回調(diào)函數(shù)本身并沒有清除這個(gè)事件,所以只要進(jìn)入等待狀態(tài)還會(huì)立刻觸發(fā)。只有把數(shù)據(jù)讀光了才會(huì)清除這個(gè)事件。

  • 暫無評(píng)論
damao

學(xué)習(xí)了

  • 暫無評(píng)論
zhaocong

1樓大神你好,我按照這個(gè)思路寫了個(gè)簡單的腳本,但是貌似有點(diǎn)問題,內(nèi)層的讀取數(shù)據(jù)event好像執(zhí)行不了。問題出在哪?

  • maq 2018-04-20

    client 端發(fā)起連接時(shí)不能用 0.0.0.0 這個(gè)地址吧?……

  • zhaocong 2018-04-20

    可以額

  • maq 2018-04-20

    內(nèi)層 new Event 的第二個(gè)參數(shù)對(duì)嗎?

  • zhaocong 2018-04-20

    我改了下貌似還是不行

  • zhaocong 2018-04-20

    $event = new Event($event_base, $fd, Event::READ | Event::PERSIST, function ($fd) use (&$event_base) {

    //接收創(chuàng)建的socket
    $conn = stream_socket_accept($fd);
    stream_set_read_buffer($fd, 0);
    
    $event2 = new Event($event_base, $conn, Event::READ | Event::PERSIST, function ($conn) {
        $con = @fread($conn,2)."\n";
        echo $con."\n";
    },$conn);
    
    $event2->add();

    }, $fd);

zhaocong
$event = new Event($event_base, $fd, Event::READ | Event::PERSIST, function ($fd) use (&$event_base) {

    //接收創(chuàng)建的socket
    $conn = stream_socket_accept($fd);
    stream_set_read_buffer($fd, 0);
    $con = @fread($conn,2)."\n";
    echo $con;

}, $fd);

這么干是可以接收到的,但是讀取數(shù)據(jù)就不基于事件循環(huán)了。

  • 暫無評(píng)論
walkor 打賞

$conn = stream_socket_accept($fd);
這個(gè)$conn是局部變量,出了函數(shù)作用域可能就銷毀了,把它存在全局?jǐn)?shù)組里試下

  • zhaocong 2018-04-23

    貌似不行額,問題是內(nèi)層的event事件無法觸發(fā)

zhaocong

內(nèi)層的event事件(fread)無法觸發(fā)

  • 暫無評(píng)論
zhaocong

此問題已解決,哈哈。
跟2個(gè)地方有關(guān)
1.event對(duì)象必須用個(gè)全局?jǐn)?shù)組保存。
2.讀取stream時(shí)需要把設(shè)置為無緩沖區(qū)。

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