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

Workerman globalEvent 全局變量疑問(wèn)

meows

globalEvent 全局變量疑問(wèn)

//// 這時(shí)候已經(jīng)初始化操作
Worker::$globalEvent = new Event();

$worker = new Worker("http://0.0.0.0:8818");
$worker->count = 8;
$worker->reusePort = false;
Worker::runAll();
// Get column mapping for UI
foreach(static::getUiColumns() as $column_name => $prop){
    !isset($worker->{$prop}) && $worker->{$prop} = 'NNNN';
    $prop_length = \strlen((string) $worker->{$prop});
    $key = '_max' . \ucfirst(\strtolower($column_name)) . 'NameLength';
    static::$$key = \max(static::$$key, $prop_length);
}

// Listen.
if (!$worker->reusePort) {
    $worker->listen();
}

   /// 由于已經(jīng)初始化,就能通過(guò)這里
   public function resumeAccept()
    {
        // Register a listener to be notified when server socket is ready to read.
        if (static::$globalEvent && true === $this->_pauseAccept && $this->_mainSocket) {
            if ($this->transport !== 'udp') {
                static::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptConnection'));
            } else {
                static::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptUdpConnection'));
            }
            $this->_pauseAccept = false;
        }
    }

// 但forkOneWorkerForLinux()看這里又是允許的
// Create a global event loop.
if (!static::$globalEvent) {
    $event_loop_class = static::getEventLoopName();
    static::$globalEvent = new $event_loop_class;
}

// Reinstall signal.
static::reinstallSignal();

//// 疑問(wèn):
因?yàn)閙aster已經(jīng)把mainSocket加入eventloop()了。
這時(shí)候globalEvent 已經(jīng)被初始化,多個(gè)worker 進(jìn)程會(huì)拷貝master的已經(jīng)加入eventloop數(shù)據(jù),這樣不會(huì)出現(xiàn)問(wèn)題?
//// 文檔講解了作用: http://wtbis.cn/doc/workerman/worker/global-event.html
/// 還是說(shuō)我這種用法Worker::$globalEvent = new Event();本身就是不被允許的呢?
1189 1 0
1個(gè)回答

walkor 打賞

Worker::$globalEvent 直接在業(yè)務(wù)中用,不用也不能初始化

  • meows 2023-10-14

    這時(shí)候能不能通過(guò)Master 去檢測(cè)用戶是否已經(jīng)這樣使用:
    Worker::$globalEvent = new Event();

    $worker = new Worker("http://0.0.0.0:8818");
    $worker->count = 8;
    $worker->reusePort = false;
    Worker::runAll();

    直接把他在master里面 static::$globalEvent = null;
    這樣的話就從實(shí)現(xiàn)上面規(guī)避這種不被允許的用法呢?
    子進(jìn)程就算拷貝過(guò)來(lái)也還是null,這樣worker進(jìn)程自己new Eventloop();就好了。

  • walkor 2023-10-14

    這代碼都好幾年了,你讓我想其中細(xì)節(jié)我也記不起來(lái)了,可能是當(dāng)時(shí)版本主進(jìn)程會(huì)創(chuàng)建eventLoop,也可能是為了做單元測(cè)試吧,

  • meows 2023-10-14

    這樣修復(fù)下:
    Master 里面寫(xiě):

    if( static::$globalEvent instanceof EventInterface) {
    $eventloop = static::$globalEvent;
    static::$eventloopClass = get_class($evnetloop);
    static::$globalEvent = null;
    }

    子進(jìn)程復(fù)制過(guò)來(lái)也是未初始化的globalEvent, 也會(huì)按照用戶的事件驅(qū)動(dòng)進(jìn)行運(yùn)行Workerman。
    這樣就兼容了這種錯(cuò)誤寫(xiě)法,底層實(shí)現(xiàn)上規(guī)避這種問(wèn)題。
    看看提交個(gè)pr,能否合并呢,不能就關(guān)閉就是啦。

  • walkor 2023-10-14

    提交吧

  • meows 2023-10-15

    已提交pr

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??