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

依然還是出現(xiàn) Alarm Clock(附上源碼)不知道原理,哪位朋友解釋一下啊。

zhouaini528

我有一個server.php文件
我在主進(jìn)程中使用GlobalData變量共享組件。每0.5秒隨機(jī)賦予$global_client->param一個數(shù)字,這一切都是正常。

use Workerman\Lib\Timer;
use Workerman\Worker;

$global_server = new GlobalData\Server('127.0.0.1','13145');
$global_client = new GlobalData\Client('127.0.0.1:13145');

$worker = new Worker();
$worker->onWorkerStart = function() use($global_client) {
    //每0.5秒隨機(jī)設(shè)置一個數(shù)
    Timer::add(0.5, function() use ($global_client){
        $global_client->param=rand(1,999999);
    });
};

Worker::runAll();

我有一個client.php文件
如果不要while循壞,我再cli模式下能正常獲取數(shù)據(jù),但是加了while循環(huán)幾次后就會出現(xiàn)Alarm Clock,我不知道是什么原因。 哪個朋友能給我說明一下原理嗎?
用for循環(huán)10次也會報這樣的錯誤

$global_client = new GlobalData\Client('127.0.0.1:13145');
while (1){
    sleep(1);
    print_r($global_client->param);
}

如果用Timer方式循環(huán)可以解決問題, 就是我想知道原理是什么?為什么會這樣?

我的理解GlobalData變量共享組件 好比數(shù)據(jù)庫,我while就是不停的連接數(shù)據(jù)庫,但是沒成功~不知道原理

4506 2 0
2個回答

MakeHui

workerman 不允許這種寫法,文檔中有說明: http://doc.workerman.net/329713

  • zhouaini528 2021-06-08

    文檔中寫的不要有死循環(huán),那么我不用while true 我就for 10次 也一樣出現(xiàn)這樣的問題

  • nitron 2021-06-08

    不能用sleep

  • nitron 2021-06-08

    沒記錯的話,Client應(yīng)該在OnXxxxx方法里實(shí)例化

  • nitron 2021-06-08

    文檔里:"如果在Workerman環(huán)境中使用GlobalData/Client,請?jiān)趏nXXX回調(diào)中實(shí)例化GlobalData/Client對象,例如在onWorkerStart中實(shí)例化。"

  • zhouaini528 2021-06-08

    @8001:明白了,就是不知道原理。

phpcreeper

背后原因:

https://github.com/walkor/GlobalData/blob/master/src/Client.php#L74
https://github.com/walkor/Workerman/blob/master/Timer.php#L127

追蹤源碼上述源碼可以發(fā)現(xiàn)定時器觸發(fā)了pcntl_alarm(1)行為,即1秒后觸發(fā)了時鐘信號,默認(rèn)會終止當(dāng)前進(jìn)程。

解決方案:

目前尚不清楚Timer這里的pcntl_alarm(1)的影響,不過按照你這while寫法【目測你這是非workerman環(huán)境用法】,原理理解了、客戶端可以暫時通過屏蔽時鐘信號這樣去解決:pcntl_alarm(0); 此外樓上提及的注意事項(xiàng)也要關(guān)注。

  • zhouaini528 2021-06-09

    謝謝你的回復(fù),對我?guī)椭浅4?/p>

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