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

10個進程,10個定時器,如何每個進程運行一個定時器?

north521

2、添加的定時任務在當前進程執(zhí)行(不會啟動新的進程或者線程),如果任務很重(特別是涉及到網絡IO的任務),可能會導致該進程阻塞,暫時無法處理其它業(yè)務。所以最好將耗時的任務放到單獨的進程運行,例如建立一個/多個Worker進程運行

if($worker->id === 0)
    {
        Timer::add(1, function(){
            echo "4個worker進程,只在0號進程設置定時器\n";
        });
    }

這個只對進程id為0有效,比如我有10個定時器,開啟10個進程,怎么讓每個進程運行一個定時器?

4695 3 0
3個回答

抽不完的寂寞

把if($worker->id === 0) 去掉就是每個進程運行一個定時器啊

north521

當前開了10個進程,已經運行5個定時器,在進程0-4運行,我從前端onMessage添加的定時器任務,怎么在進程5運行?

  • 暫無評論
north521
<?php
namespace app\push\controller;
use think\worker\Server;
use Workerman\Lib\Timer;
require_once APP_PATH . '/push/controller/Cron.php';
class Worker extends Server
{
    protected $socket = 'text://0.0.0.0:2346';
    //protected $count = 1;
    protected $processes=10;

    public function onWorkerStart($work){
        //讀出符合條件的任務
        $task = new Task();
        $taskList = $task->getTaskList();
        if ($taskList){
            foreach ($taskList as $value){
                    $this->task($value);
            }
        }
    }

    //執(zhí)行的任務

    public static function task($data){
        //添加定時器,返回定時器的ID
        $cron = new Cron();
        $timer_id = Timer::add(1,array($cron,'execute'),array($data),true);

        //更新任務定時器ID
        $task = new Task();
        $task->updateTimer($data,$timer_id);
        return $timer_id;
    }

    /**
     * 監(jiān)聽接收數據
     * @param $connection
     * @param $data
     */
    public function onMessage($connection, $data)
    {
        $data = trim($data);
        $data = json_decode($data,true);
        //任務ID
        $taskId = $data;
        //請求類型
        $type = $data;
        switch ($type){
            case 'add':
                //添加定時器
                $task = new Task();
                $list = $task->getTaskById($taskId);
                $timer_id = $this->task($list);
                //發(fā)送數據
                $data = array('code'=>1,'msg'=>'添加定時器成功');
                break;
            case 'stop':
                //刪除定時器
                $timer_id = $data;//定時器ID
                //刪除定時器
                $res = Timer::del($timer_id);
                if ($res){
                    //刪除任務
                    $task = new Task();
                    $task->delTask($taskId);
                    $data = array('code'=>1, 'msg'=>'刪除定時器成功');
                }else {
                    $data = array('code'=>0, 'msg'=>'刪除定時器失敗');
                }
                break;
            default:
                $data = array('code'=>505, 'msg'=>'非法請求');
                break;
        }

        //$data = array('code'=>1, 'msg'=>'刪除定時器成功');
        return $connection->close(json_encode($data));

    }

    public static function onWorkerStop(){
        //清空定時任務
        $task  = new Task();
        $task->clearTimer();
    }

    public static function onError($connection, $code, $msg){
        return $msg;
    }
}

[attach]1275[/attach]

file:///C:\Users\zhang\AppData\Roaming\Tencent\Users\171051823\QQ\WinTemp\RichOle\3(%L9K6)8Z$H_ZUKW7WJ[7D.png

file:///C:\Users\zhang\AppData\Roaming\Tencent\Users\171051823\QQ\WinTemp\RichOle\3(%L9K6)8Z$H_ZUKW7WJ[7D.png
當瀏覽器調用onMessage時,并不會在新的進程運行,怎么樣能在新的進程運行?

?

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??