導入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