まず、さまざまなビジネス システムでは、サーバーがバックグラウンドで関連データをスキャンし、対応する統計、通知、その他の操作をトリガーする必要があることがよくあります。
例えば、プロジェクト管理システムでは、毎日一定時間内での各タスクの実行や期限切れ、プロジェクト全体の進捗状況などをカウントし、対応付ける必要があります。統計に基づく通知; (推奨される学習: swoole ビデオ チュートリアル )
このようなシナリオをプログラムするにはどうすればよいですか?
通常のプログラミング方法を使用すると、自動トリガーと統計を実現できません。もちろん、この単純なアイデアはシステムの cron ジョブ メカニズムにとって有益です。ただし、この方法では、構成と信頼性の点で、より多くの人的操作要素が必要になります。
Swoole は C を使用して開発された PHP 拡張機能で、PHP を介して高性能な Web サーバーを実装できると同時に、タイマー機能やタスクキュー Task 機能も組み込まれています。このように、swoole に基づいてプログラム レベルで実装を制御し、独立したメッセージ キュー サーバーやスケジュールされたタスク管理ツールなどの外部ツールへの依存を減らすことができます。
swoole の力は、そのプロセス モデルの設計にあり、非同期の問題を解決するだけでなく、並列処理も解決します。
使用法は次のとおりです。
swoole_server_addtimer($serv, 10);
2 番目のパラメータは、タイマーの間隔時間 (秒単位) です。スウールタイマーの最小粒度は 1 秒です。複数のタイマーをサポートします。同じ間隔の 2 つのタイマーは存在できないことに注意してください。タイマーを追加した後、コールバック関数を作成する必要があります。
具体的なコードは次のとおりです:
swoole_server_handler($serv, 'onTimer', my_OnTimer); function my_OnTimer($serv, $interval) { echo "Timer[$interval] is call\n"; }
Task モジュールは、Webim でのブロードキャストなど、いくつかの非同期の遅いタスクを実行するために使用されます。 node.js と同様に、100,000 個の接続があり、ブロードキャストを送信すると 100,000 回ループしますが、この時点ではプログラムは何もできず、新しい接続を受け入れることも、パケットの送受信もできません。
しかし、swoole は異なります。タスク プロセスにスローされた後も、リアクターとワーカーは引き続き実行されます。タスクが完了すると、ワーカー プロセスにタスクが完了したことを非同期的に通知します。
以上がswoole は複数のタイマーを設定できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。