Swoft2.x白の研究ノート(C)---タスク、コルーチン

導入swoft

  1、タスク

  2、コルーチン

 

A:タスクのタスク:

  図1は、APP / bean.phpファイルを追加、配置しました

  'httpServerの' => [ 
        // ... 
        => [ 'on'に
            SwooleEvent :: TASK => \豆(TaskListener ::クラス)、//タスクを有効にするイベントタスクと終了する必要があります
            SwooleEventを:: FINISH => \豆( FinishListener ::クラス)
        ]、
        / * @see HttpServerを:: $設定* / 
        'の設定' => [ 
            'task_worker_num' => 12、
            'task_enable_coroutine' => trueの場合、
            'worker_num' => 2 
        ] 
    ]、
コードの表示

  2、定期的なタスク

1、インストールswoft作曲/ crontabの必要とする
2を配置
 'HTTPServerの' => 
            // ... 
            'プロセス' => 
                =>ビーン(Swoft \クローンタブ\プロセスの\ CrontabProcess ::クラス) 'のcrontab' 
            ] 
            // ... 
        ]、

3は、/アプリ/タスク/クローンタブ/ファイルの新しいフォルダに定義された

<?PHP 

、名前空間のApp \タスク\クローンタブ

を使用Swoft \クローンタブ\ annotaionマッピング\クロン\; 
使用Swoft \クローンタブ\ annotaion \予定\マッピング; 

/ ** 
 *クラスDemoCronTask 
 *のApp \クローンタブ\タスクを@package 
 * 
 * @Scheduled(名前= "demoCronTask")//宣言タイマータスク
 * / 
クラスDemoCronTask { 

    / ** 
     * @Cron( "*")//秒あたりの実行
     * / 
    パブリック関数secondTask(){ 
        のvar_dump( " - 111 ----"、日付( 'はYmd H:I:s'は、時間()))。
    } 

    / ** 
     * @Cron( "0 * * * * *")//每分钟执行
     * / 
    パブリック関数miunteTask(){ 
        のvar_dump( "222 ------"、日付( 'はYmd H:I: s'は、時間())); 
    } 
}
コードの表示

     3、コルーチン、非同期タスク

  (1)、ミッションステートメント、/アプリ/タスク/タスク/フォルダの新機能

<?PHPの宣言(strict_types = 1)。

名前空間のApp \タスク\タスク。

Swoft \タスク\注釈\マッピング\タスクを使用します。
Swoft \タスク\注釈\マッピング\ TaskMappingを使用します。

/ ** 
 *クラスDemoTask 
 * 
 * @since 2.0 
 * @task(名前= "demoV2Task")//标记类是一个任务
 * / 
クラスDemoTask 
{ 
    / ** 
     * @TaskMapping(名前は= "リスト")//映射名称
     * 
     * @param int型$ ID 
     * @paramの文字列$デフォルト
     * 
     * @return配列
     * / 
    パブリック関数GETLIST(int型ます$ id):配列
    { 
        のvar_dump( "------------"); 

        睡眠(5); 

        [戻ります
            'リスト' => [1、3,3] 
            'ID' => $番号
        ]。
    } 

    / ** 
     * @param int型$ ID 
     * @returnブール値
     * 
     * @TaskMapping(名前= "putLists")
     * / 
    パブリック関数putList(int型ます$ id):BOOL 
    { 
        ($のID> 5)であれば
            trueを返します。

        falseを返します。
    } 
}
コードの表示

       (2)タスクの配信

//コルーチン配達
$データ:: =タスクCO'S( 'demoV2Task'、 'リスト'、[12れる]); 

//非同期配信
$データ=タスク::非同期( ' demoV2Task'、 'リスト'、[12]) ;

      非同期タスクの処理結果に焦点を当てる必要が、リスナーが新しいファイルの下に/フォルダ/アプリ/タスク/リスナーに追加することができた場合(3)、非同期配信

<?PHPの

名前空間のApp \タスク\リスナー。

Swoft \ログ\ヘルパー\ CLOGを使用します。
関数コンテキストを使用します。
Swoft \イベント\注釈\マッピング\リスナーを使用します。
Swoft \イベント\ EventHandlerInterfaceを使用します。
Swoft \イベント\ EventInterfaceを使用します。
Swoft \タスク\ TaskEventを使用します。

/ ** 
 *クラスDemoListener 
 * @packageのApp \タスク\リスナー
 * @Listener(イベント= TaskEvent :: FINISH)//参数必须带Finsh 
 * / 
クラスDemoListenerはEventHandlerInterface {実装

    / ** 
     * @param EventInterface $イベントを
     * 
     * @ \ Swoft \例外\ SwoftExceptionスロー
     * / 
    パブリック関数ハンドル(EventInterface $イベントを):無効
    {
        // TODO:ハンドル()メソッドを実装します。
        $ FID =コンテキスト() - > getTaskUniqid(); 

//のvar_dump($ FID)。
        CLOG ::情報(\コンテキスト() - > getTaskUniqid()); 

        $ taskData =コンテキスト() - > getTaskData(); 
//のvar_dump($ taskData)。

        CLOG ::情報(\コンテキスト() - > getTaskData()); 
    } 
}
コードの表示

 

注意:タスクはまだ明らかではない二つの場所があります

      送達がコルーチン遮断される1、。

  図2に示すように、パラメータのみ@Listener(イベント= TaskEvent :: FINISH)を持つすべてのリスナーが再び実行される非同期モニタ。

 

ドキュメントを表示します。 

    https://www.swoft.org/docs/2.x/zh-CN/task/index.html    

    

 

 

おすすめ

転載: www.cnblogs.com/cj8988/p/11607593.html