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

關(guān)于listen() 和 run()的問題

再也不

關(guān)于listen() 和 run()的問題


最近正在學(xué)習(xí)workerman,看到源碼里的listen() 和 run() 函數(shù)里面都有一個add()方法。

// 放到全局事件輪詢中監(jiān)聽_mainSocket可讀事件(客戶端連接事件)

if(self::$globalEvent) //  此處是實例化的Select
{
    if($this->transport !== 'udp')
    {
        self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptConnection')); // 添加到select 事件庫中 讀事件
    }
    else
    {
        self::$globalEvent->add($this->_mainSocket,  EventInterface::EV_READ, array($this, 'acceptUdpConnection'));
    }
}

**此處的add方法是listen()的最后調(diào)用的,后面我有看到 run()方法里面也有add() 方法,但是listen() 和 run()里面的add()方法雖然是一樣的,但是應(yīng)該是互相獨立的,因為都各自實例化了下 Select(),但是我不明白的是listen()最后調(diào)用了 add() 進行添加到select 事件庫中,但是好像后面并沒有了其他操作,而run()方法里面調(diào)用了add()方法,它后面好歹有TIme() 和 loop()進行后續(xù)處理啊。

跪求哪位高手給我詳細(xì)分析下啊, listen() 調(diào)用的 add() 的作用哈**

3591 1 0
1個回答

walkor 打賞

workerman允許在服務(wù)運行過程中調(diào)用new Worker實例化Worker建立監(jiān)聽其它端口。此時因為已經(jīng)在運行,所以不需要調(diào)用run方法,直接調(diào)用listen方法,將新的監(jiān)聽add到EventLoop中即可。

$worker = new Worker('http://0.0.0.0:1234');
$worker->onWorkerStart = function($worker) {
    $ws_worker = new Worker('websocket://0.0.0.0:5678');
    $ws_worker->onMessage = 'on_message';
    // 調(diào)用listen,將ws_worker的監(jiān)聽socket加入到EventLoop中
    $ws_worker->listen();
};
$worker->onMessage = 'on_message';
function on_messge($con, $msg) {
    var_dump($msg);
    $con->send('ok');
}
Worker::runAll();
  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??