ホームページ  >  記事  >  PHPフレームワーク  >  swoole は複数のタイマーを設定できますか?

swoole は複数のタイマーを設定できますか?

(*-*)浩
(*-*)浩オリジナル
2019-12-16 13:52:172242ブラウズ

swoole は複数のタイマーを設定できますか?

まず、さまざまなビジネス システムでは、サーバーがバックグラウンドで関連データをスキャンし、対応する統計、通知、その他の操作をトリガーする必要があることがよくあります。

例えば、プロジェクト管理システムでは、毎日一定時間内での各タスクの実行や期限切れ、プロジェクト全体の進捗状況などをカウントし、対応付ける必要があります。統計に基づく通知; (推奨される学習: 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。