PHP は Gearman 拡張機能をインストールして、非同期タスクや段階的なタスクを実装します。
1. はじめに
Gearman は、タスクをキューに入れ、一連のマシンに自動的に割り当てるプログラム フレームワークです。 Gearman はクロス言語およびクロスプラットフォームであり、非同期バックグラウンド タスクを実装するのに非常に便利です。 PHP 公式コレクション: http://php.net/manual/zh/book.gearman.php
上に示したように、Gearman リクエストの処理には 3 つの役割が含まれます。クライアント -> ジョブ -> ワーカー。
クライアント: リクエストのイニシエーター。C、PHP、Perl、MySQL UDF などです。
ジョブ: リクエスト スケジューラは、クライアントによって発行されたリクエストを調整し、適切なワークに転送する責任があります。
ワーカー: C、PHP、Perl などのリクエスト ハンドラー。
2. インストール
1. サーバーをインストールします:
公式ダウンロードについては、https://launchpad.net/gearmand にアクセスしてください。
yum install boost-devel* gperf* libevent-devel* libuuid-devel
wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12。 tar.gz
tar zxvf gearmand…
cd gearmand…
./configure
make && make install
この拡張機能をインストールするには、最初にいくつかの依存関係をインストールする必要があります。デフォルトで使用することをお勧めします。 ./configure を直接指定し、パスなどを指定しないでください。
FAQ 1: boost>=1.39 が見つからないというメッセージが表示されます。明らかにインストールされていますが、gcc-c++ がインストールされていないマシンもあります。 yum install gcc-c++ で十分です。
FAQ 2: インストール完了後に起動に失敗します。Gearmand -d または gearmand -d -u root を起動できません。 gearmand -vvv デバッグ モードでは、オプション -v が定義されていないことを示すプロンプトが表示されます。この時点で、gearand の新しいバージョンのバグが発生しているはずです。ログを確認すると、「000000 [ main ]ソケット() (プロトコルでサポートされていないアドレス ファミリ) -> libgearman-server/gearmand.」というエラーが表示されるはずです。 cc:470"。解決策は、起動時にパラメーター -L 0.0.0.0 を追加して、バインドを ipv4 アドレスのみに制限し、ipv6 を無視することです。または、1.0.2 以下のバージョンをインストールします。公式フィードバック投稿を参照してください: https://bugs.launchpad.net/gearmand/+bug/1134534
参考リンク: http://www.usamurai.com/2013/05/01/install-gearman - from-source-in-centos/
2. gearman の PHP 拡張機能をインストールします
拡張機能をダウンロードします: http://pecl.php.net/package/gearman
wget http://pecl.php.net/get/gearman-1.1.2.tgz
tar zxvf gearman-1….
cd gearman-1 …
phpize
./configure
make && make install
インストールはすぐに完了し、so ファイルへのパスが最後に表示されます (/usr/lib64/php/modules/
) php.ini =”/usr/lib64/php/modules/gearman.so” の末尾に拡張子を追加し、Apache を再起動し、php –info |grep “gearman” または php -m を出力するか、Web ページに phpinfo() を出力します。インストールが成功したことを確認します。
FAQ: 設定時に php-config が見つからないというメッセージが表示された場合は、それを指定してください。たとえば、-with-php-config=/usr/local/php/bin/php-config のように、ディレクトリだけを記述するのではなく、必ず完全に指定してください。
3. 例
クライアント:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$client=newGearmanClient() $client->addServer; ('127.0.0.1', 4730);//このマシンは直接 addServer() できますが、デフォルトのサーバーはポート 4730 を使用します $client->setCompleteCallback('completeCallBack');// 最初にバインドします。 Valid
$result1=$client->do('say','do');//do は同期的に実行され、処理され、処理結果を返します。 $result2=$client->doBackground('say','doBackground');//非同期的に、処理ハンドルのみが返されます。 $result3=$client->addTask('say','addTask');//タスクをキューに同期的に追加しますか?コールバック関数はタスクを追加することで設定できます。 $result4=$client->addTaskBackground('say','addTaskBackground');//バックグラウンド タスクをキューに非同期的に追加しますか? $client->runTasks();//キュー内のタスクを実行しますが、do シリーズでは runTask() は必要ありません。
echo'result1:'; var_dump($result1); echo' echo'result2:'; var_dump($result2); echo'
echo'result3:'; var_dump($result3) echo'
echo'result4:'; var_dump($result4); echo'
// バインディング コールバック関数、addTask にのみ有効 functioncompleteCallBack($task) { echo'CompleteCallback!処理結果:'.$task->data().' }
|
1
|
<🎜> $worker=newGearmanWorker(); <🎜> <🎜> $worker->addServer(); <🎜> <🎜> $worker->addFunction ('say',function(GearmanJob$job){ <🎜> <🎜> $workload=$job->workload();// クライアントから渡されたデータを受信 echo'receive data: '. $workload.PHP_EOL; returnstrrev($workload); // 逆処理のみ // 無限ループ処理、gearman は内部処理があり、使いすぎによる死亡はありません while($worker->work()){ if($worker->returnCode( ) !== GEARMAN_SUCCESS){ echo'error'.PHP_EOL } } 上記のクライアント出力: CompleteCallback!ハンドル結果:ksaTdda ワーカー出力: データ受信:do 4. PCntl 拡張機能は大まかなマルチワーカー保護を実装しますワーカーはバックグラウンドに留まらなければならず、ジョブを処理するためにジョブサーバーから呼び出される準備が常に整っているため、ワーカーは死ぬことはできません。オンラインです。解決策は、スケジュールされたタスクを通じてワーカーを再起動することです。これは良い解決策です。マルチプロセス保護の話もありますが、実際には PHP を実装するのは困難です。解決策の 1 つは、メインプロセスからフォークされたサブプロセスが起動してワーカーを実行することです。ワーカーはメインプロセスのサブプロセスです。メインプロセスは子プロセスを監視し、ワーカーが終了すると、すぐに新しいプロセスが開始されます。しかし、メインプロセスが停止したらどうなるでしょうか?メインプロセスはビジネス処理を実行しないため、死亡する確率は子プロセスワーカーが死亡する確率よりもはるかに小さくなります。 次の例では、メインプロセスは 5 つのサブプロセスを開始します。つまり、5 つのワーカーを開始してそれらを監視します。
参考リンク:http://huoding.com/2012/10/30/196、http://www.zrwm.com/?cat=80 |

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。
