亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

自定義進程

PHP自帶的pcntl存在許多不足,不支持重定向標準輸入和輸出及進程間通信的功能,且容易使用錯誤。
EasySwoole基于SwooleProcess模塊進行了封裝,來創建工作進程,用于處理耗時任務,消息隊列,等其它的特殊任務。
EasySwoole啟動時,會自動創建注冊的進程,并執行進程指定的邏輯代碼,進程意外退出時,會被重新拉起。

創建一個自定義進程

需要定義一個進程類繼承EasySwoole\Component\Process\AbstractProcess

定義進程內執行邏輯回調

protected function run($arg)
{
    // TODO: Implement run() method.
    $this->getProcessName(); // 獲取注冊進程名稱

    $this->getProcess(); // 獲取進程實例 \Swoole\Process

    $this->getPid(); // 獲取當前進程Pid

    $this->getArg(); // 獲取注冊時傳遞的參數
}

進程間通信Pipe回調

protected function onPipeReadable(Process $process)
{
    // 該回調可選
    // 當主進程對子進程發送消息的時候 會觸發
    $process->read(); // 讀取消息
}

進程間異常回調

protected function onException(\Throwable $throwable, ...$args)
{
    // 該回調可選
    // 捕獲run方法內拋出的異常
    // 這里可以通過記錄異常信息來幫助更加方便的知道出現問題的代碼
}

進程信號回調

protected function onSigTerm()
{
    // 當進程接收到 SIGTERM 信號觸發該回調
}

進程意外退出回調

protected function onShutDown()
{
    // 該回調可選
    // 進程意外退出 觸發此回調
    // 大部分用于清理工作
}

注冊進程

EasySwoole 全局的 mainServerCreate 事件中進行進程注冊

$processConfig = new \EasySwoole\Component\Process\Config([
    'processName' => 'CustomProcess', // 設置 自定義進程名稱
    'processGroup' => 'Custom', // 設置 自定義進程組名稱
    'arg' => [
        'arg1' => 'this is arg1!'
    ], // 【可選參數】設置 注冊進程時要傳遞給自定義進程的參數,可在自定義進程中通過 $this->getArg() 進行獲取
    'enableCoroutine' => true, // 設置 自定義進程自動開啟協程
]);

\EasySwoole\Component\Process\Manager::getInstance()->addProcess(new CustomProcess($processConfig));

推薦使用 \EasySwoole\Component\Process\Manager 類進行注冊自定義進程,注冊方式示例代碼如上所示。如果您的框架版本過低,不支持 \EasySwoole\Component\Process\Manager 類,可使用如下方式進行注冊自定義進程: \EasySwoole\EasySwoole\ServerManager::getInstance()->getSwooleServer()->addProcess((new TickProcessnew CustomProcess($processConfig));

注意:用戶在注冊多個相同配置的自定義進程時,請一定不要復用實例化后的進程對象,而應該重新實例化一個新的進程對象。如果復用了將導致不可預知的結果。正確注冊和錯誤注冊的參考示例代碼如下:

錯誤的注冊示例:

EasySwooleEvent.php

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        date_default_timezone_set('Asia/Shanghai');
    }

    public static function mainServerCreate(EventRegister $register)
    {
        $processConfig = new \EasySwoole\Component\Process\Config([
            'processName' => 'TestProcess', // 設置 進程名稱為 TickProcess
        ]);

        // 【推薦】使用 \EasySwoole\Component\Process\Manager 類注冊自定義進程
        $testProcess = new \App\Process\TestProcess($processConfig);

        ### !!! 錯誤原因:把上述實例化得到的自定義進程對象 $testProcess 進行了復用,注冊了 2 次,將導致未知錯誤。
        // 注冊進程
        \EasySwoole\Component\Process\Manager::getInstance()->addProcess($testProcess);
        \EasySwoole\Component\Process\Manager::getInstance()->addProcess($testProcess);
    }
}

正確的注冊示例:

EasySwooleEvent.php

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        date_default_timezone_set('Asia/Shanghai');
    }

    public static function mainServerCreate(EventRegister $register)
    {
        $processConfig = new \EasySwoole\Component\Process\Config([
            'processName' => 'TestProcess', // 設置 進程名稱為 TickProcess
        ]);

        // 【推薦】使用 \EasySwoole\Component\Process\Manager 類注冊自定義進程
        $testProcess1 = new \App\Process\TestProcess($processConfig);
        $testProcess2 = new \App\Process\TestProcess($processConfig);

        ### 正確的注冊進程的示例:重新使用 new 實例化另外 1 個新的自定義進程對象,然后進行注冊
        // 注冊進程
        \EasySwoole\Component\Process\Manager::getInstance()->addProcess($testProcess1);
        \EasySwoole\Component\Process\Manager::getInstance()->addProcess($testProcess2);
    }
}

上文的 \App\Process\TestProcess 和下文的 \App\Process\CustomProcess 類的代碼類似,這里不做重復說明。

完整示例代碼

1. 定義自定義進程類示例

首先,我們定義一個自定義進程類繼承 \EasySwoole\Component\Process\AbstractProcess 類,示例代碼如下:

<?php
namespace App\Process;

use EasySwoole\Component\Process\AbstractProcess;
use Swoole\Process;

class CustomProcess extends AbstractProcess
{
    protected function run($arg)
    {
        // TODO: Implement run() method.
        $processName = $this->getProcessName(); // 獲取 注冊進程名稱
        $swooleProcess = $this->getProcess(); // 獲取 注冊進程的實例 \Swoole\Process
        $processPid = $this->getPid(); // 獲取 當前進程 Pid
        $args = $this->getArg(); // 獲取 注冊進程時傳遞的參數

        var_dump('### 開始運行自定義進程 start ###');
        var_dump($processName, $swooleProcess, $processPid, $args);
        var_dump('### 運行自定義進程結束 end ###');
    }

    protected function onPipeReadable(Process $process)
    {
        // 該回調可選
        // 當主進程對子進程發送消息的時候 會觸發
        $recvMsgFromMain = $process->read(); // 用于獲取主進程給當前進程發送的消息
        var_dump('收到主進程發送的消息: ');
        var_dump($recvMsgFromMain);
    }

    protected function onException(\Throwable $throwable, ...$args)
    {
        // 該回調可選
        // 捕獲 run 方法內拋出的異常
        // 這里可以通過記錄異常信息來幫助更加方便地知道出現問題的代碼
    }

    protected function onShutDown()
    {
        // 該回調可選
        // 進程意外退出 觸發此回調
        // 大部分用于清理工作
    }

    protected function onSigTerm()
    {
        // 當進程接收到 SIGTERM 信號觸發該回調
    }
}

2. 注冊進程示例

然后在 mainServerCreate 事件中進行注冊進程,示例代碼如下:

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        date_default_timezone_set('Asia/Shanghai');
    }

    public static function mainServerCreate(EventRegister $register)
    {
        $processConfig = new \EasySwoole\Component\Process\Config([
            'processName' => 'CustomProcess', // 設置 進程名稱為 TickProcess
            'processGroup' => 'Custom', // 設置 進程組名稱為 Tick
            'arg' => [
                'arg1' => 'this is arg1!',
            ], // 傳遞參數到自定義進程中
            'enableCoroutine' => true, // 設置 自定義進程自動開啟協程環境
        ]);

        // 【推薦】使用 \EasySwoole\Component\Process\Manager 類注冊自定義進程
        $customProcess = (new \App\Process\CustomProcess($processConfig));
        // 【可選操作】把 tickProcess 的 Swoole\Process 注入到 Di 中,方便在后續控制器等業務中給自定義進程傳輸信息(即實現主進程與自定義進程間通信)
        \EasySwoole\Component\Di::getInstance()->set('customSwooleProcess', $customProcess->getProcess());
        // 注冊進程
        \EasySwoole\Component\Process\Manager::getInstance()->addProcess($customProcess);

        /*
        #【針對于低版本不支持 \EasySwoole\Component\Process\Manager 類】可使用 \EasySwoole\EasySwoole\ServerManager 類注冊自定義進程
        $customProcess = (new \App\Process\CustomProcess($processConfig))->getProcess();
        // 【可選操作】把 tickProcess 的 Swoole\Process 注入到 Di 中,方便在后續控制器等業務中給自定義進程傳輸信息(即實現主進程與自定義進程間通信)
        \EasySwoole\Component\Di::getInstance()->set('customSwooleProcess', $customProcess);
        // 注冊進程
        \EasySwoole\EasySwoole\ServerManager::getInstance()->getSwooleServer()->addProcess($customProcess);
        */
    }
}

3. 向自定義進程中傳遞消息

<?php

namespace App\HttpController;

use EasySwoole\Component\Di;
use EasySwoole\Http\AbstractInterface\Controller;

class Index extends Controller
{
    public function index()
    {
        // 獲取 Di 中注入的 自定義進程
        $customProcess = Di::getInstance()->get('customSwooleProcess');
        // 向自定義進程中傳輸信息,會觸發自定義進程的 onPipeReadable 回調
        $customProcess->write('this is test!');
    }
}

進程管理命令說明

EasySwoole 內置了對于 Process 的命令行操作,方便開發者非常友好地去管理 Process

可執行 php easyswoole.php process -h 來查看具體操作。

顯示所有進程

php easyswoole.php process show

如果想要以 MB 形式顯示:

php easyswoole.php process show -d

殺死指定進程(PID)

php easyswoole.php process kill --pid=PID

殺死指定進程組(GROUP)

php easyswoole.php process kill --group=GROUP_NAME

殺死所有進程

php easyswoole.php process killAll

強制殺死進程

需要帶上 -f 參數,例如:

php easyswoole.php process kill --pid=PID -f

亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    成人午夜影院在线观看| 欧美日韩综合精品| 97夜夜澡人人双人人人喊| caoporen国产精品| 麻豆av一区二区三区| 亚洲精品电影在线一区| 激情欧美丁香| 91精品国产综合久久久久久丝袜| 风间由美久久久| 在线观看日韩羞羞视频| 99国内精品| 国产麻豆乱码精品一区二区三区| 亚洲v国产v在线观看| 99热在线精品观看| 欧美日韩亚洲免费| 在线视频日韩| 欧美精品亚洲精品| 国产精品亚洲综合久久| 欧美久久综合性欧美| 亚洲激情一区二区三区| 久久国产精品精品国产色婷婷 | 久久资源av| 激情欧美亚洲| 久久精品国产一区二区三区不卡| 欧美在线资源| 成人区精品一区二区| 欧美日韩蜜桃| 欧美成人免费在线| 国产亚洲在线| 制服国产精品| 狠狠色综合欧美激情| 亚洲福利专区| 五月天国产一区| 老牛嫩草一区二区三区日本 | 成人资源视频网站免费| 午夜日本精品| 久久99精品久久久久久秒播放器 | 欧美日韩综合精品| 欧美精品尤物在线| 114国产精品久久免费观看| 欧美日韩免费| 亚洲国产日韩综合一区| 国产欧美综合精品一区二区| 91久久黄色| 欧美日韩一区在线观看视频| 欧美另类高清视频在线| 91入口在线观看| 99精品国产福利在线观看免费 | 国产毛片一区| 午夜日本精品| 亚洲精品无人区| 国产乱码精品一区二区三区日韩精品 | 日韩视频在线观看国产| 永久久久久久| 日韩欧美精品一区二区| 久久精品99久久| 久久永久免费| 久久国产精品毛片| 亚洲影音先锋| 午夜在线一区| 亚洲欧美日韩一区在线观看| 在线免费高清一区二区三区| 欧美日韩成人一区二区三区| 影音先锋欧美资源| 欧美精品一卡| 国产精品成人观看视频免费| 欧美久久影院| 亚洲欧洲日本一区二区三区| 在线日韩电影| 国产精品久久波多野结衣| 亚洲另类自拍| 久久99伊人| 老司机精品福利视频| 国产精品国产三级国产专区53 | 欧美日韩亚洲在线| 欧美一二三区| 亚欧精品在线| 午夜欧美精品久久久久久久| 欧美日本中文| 亚洲美女色禁图| 久久精品伊人| 国产伦精品一区二区三区高清版 | 亚洲日本japanese丝袜| 中文字幕一区二区三区最新| 在线观看一区二区三区三州| 欧美三区不卡| 国产日韩1区| 7777精品伊久久久大香线蕉语言| 久久综合影视| 欧美日韩免费高清| 一区二区三区三区在线| 亚洲国产一区二区精品专区| av不卡在线| 久久在线91| 区一区二区三区中文字幕 | 国产精华一区| 秋霞毛片久久久久久久久| 一区二区三区四区| 亚洲神马久久| 蜜桃传媒视频麻豆第一区免费观看 | 亚洲精品视频一区二区三区| 久久久精品日韩| 日本一区高清不卡| 影音先锋中文字幕一区二区| 久久综合福利| 亚洲一区二区三区加勒比| 精品成人在线| 国产精品日韩一区二区免费视频| 亚洲va韩国va欧美va精四季| 国产婷婷精品| 久久久久久亚洲精品不卡4k岛国| 午夜精品亚洲一区二区三区嫩草| aa亚洲婷婷| 日韩欧美激情一区二区| 国产精品美女久久久| 日本欧美色综合网站免费| 亚洲三级影院| 视频一区二区三区免费观看| 国产精品一二| 亚洲国产精品综合| 蜜乳av另类精品一区二区| 视频一区二区在线| 久久亚洲视频| 狠狠入ady亚洲精品| 久久99精品久久久久久秒播放器 | 欧美日韩一区在线播放| 国产精品国色综合久久| 激情综合中文娱乐网| 久久久影院一区二区三区| 极品中文字幕一区| 日本一区不卡| 91久久国产综合久久蜜月精品| 欧美在线网站| 欧美日韩综合精品| 久久综合九色综合网站| 欧美先锋影音| 日韩国产欧美精品| 久久久久久精| 日韩午夜av在线| 丝袜美腿玉足3d专区一区| 懂色一区二区三区av片| 国产精品久久国产愉拍| 中文字幕久久综合| 欧美一区二区三区电影在线观看| 久久激情一区| 伊人天天综合| 老司机精品导航| 久久久久久久久久久久久久久久av| 国内精品视频免费| 亚洲欧美日本日韩| 先锋影音日韩| 狠狠干一区二区| 久久中文在线| 亚洲专区在线| 国产精品美女久久久浪潮软件| 欧美亚州在线观看| 自拍另类欧美| 欧美日韩一区在线视频| 国内精品视频免费| 狠狠色噜噜狠狠狠狠色吗综合| 91传媒在线免费观看| 久久亚洲欧洲| 成人免费91在线看| 99精品国产高清在线观看| 久久久久久亚洲精品杨幂换脸| 午夜综合激情| 91在线播放视频| 国产欧美亚洲日本| 久久久久一区二区三区| 日韩.欧美.亚洲| 亚洲精品一区二区三区樱花| 日本一区二区在线视频| 欧美成ee人免费视频| 欧美精品一区二区三区久久| 欧美性大战久久久久| 婷婷四月色综合| 欧美精品一区在线| 亚洲美女一区| 91精品天堂| 久久人人97超碰人人澡爱香蕉| 久久综合色一本| 亚洲自拍三区| 亚洲国产高清一区| 久久精品成人| 久久国产精品久久精品国产| 欧美中日韩一区二区三区| 一区二区三区四区五区精品 | 欧美精品一区二区三区在线看午夜 | 欧美久久久久久| 一区二区三区国产在线| 久久久久久国产精品mv| 精品一区久久久久久| 永久域名在线精品| 在线亚洲国产精品网站| 91久久久一线二线三线品牌| 免费电影一区| 欧美ab在线视频| 久久精品盗摄| 手机看片福利永久国产日韩| 欧美激情一区|