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

總感覺是錯誤的,請大神知道workerman中的timer類的使用

bobshipwood

問題描述

$worker = new Worker();
        $worker->count = 4;
        $worker->onWorkerStart = function ($worker) {
            try {
                switch ($worker->id) {
                    case 0:
                        $timers = []; // 保存相關(guān)485網(wǎng)關(guān)的定時器任務(wù)
                        Timer::add(60, function () use (&$timers) { // 每隔1分鐘檢測一次數(shù)據(jù)庫的值, 查詢有沒有新建的設(shè)備
                            $service = app()->make(DeviceModelService::class);
                            $devices = $service->getActiveDevices(); // 假設(shè)這個方法返回所有需要定時任務(wù)的設(shè)備
                            foreach ($devices as $device) {
                                if (isset($timers[$device->id]) && $timers[$device->id]['interval'] != $device->ror_second) {
                                    Timer::del($timers[$device->id]['timer_id']);
                                    unset($timers[$device->id]);
                                }
                                if (!isset($timers[$device->id])) {
                                    $timer_id = Timer::add($device->ror_second, function() use ($device){
                                        // 執(zhí)行業(yè)務(wù)代碼
                                        Device485::dispatch($device->device_id,$device->model_id, $device->address);
                                    });
                                    $timers[$device->id] = [
                                        'timer_id' => $timer_id,
                                        'interval' => $device->ror_second
                                    ];
                                }
                            }
                        });
                        break;

為此你搜索到了哪些方案及不適用的原因

上面的代碼首選判斷間隔時間是否和數(shù)據(jù)庫設(shè)定的值相同,如果不同,則進(jìn)行刪除定時任務(wù),然后再次添加定時任務(wù)。
想知道Timer::del($timers[$device->id]['timer_id']);這個方法可以理解成在一個隊列中,把這個任務(wù)給清理掉了嗎?

492 1 1
1個回答

lunzi

沒看到timers數(shù)組的作用,要是我寫的話就這樣

if($worker->id == 0) {
    Timer::add(60, function() {
        $service = app()->make(DeviceModelService::class);
        $devices = $service->getActiveDevices(); // 假設(shè)這個方法返回所有需要定時任務(wù)的設(shè)備
        while($device = array_pop($devices)) {
            Timer::add($device->ror_second, function() use ($device){
                // 執(zhí)行業(yè)務(wù)代碼
                Device485::dispatch($device->device_id,$device->model_id, $device->address);
            });
        }
    })
}
  • lunzi 2024-10-28

    其他的查詢條件寫在getActiveDevices里,反正都是要一分鐘調(diào)用一次

??