サーバー アクセスの負荷が比較的高い場合は、負荷分散を使用して負荷を複数のサーバーに分散できますが、さらに時間のかかるリクエストがいくつかあります。例:
1. メール サーバーに接続し、非常に長い HTML 電子メールを送信する必要があります。 (推奨学習: PHP ビデオ チュートリアル )
2. ユーザーがアップロードした画像をトリミングし、複数のサムネイルを生成する必要があります。
3. ユーザーがアップロードしたファイルは複数のサーバーに分散する必要があります。
日常のアプリケーションでは、リクエストが完了するまでにユーザーが一定時間待機する必要があることがよくあります。ユーザーが写真をアップロードするとき、写真が正常にアップロードされた後、写真はトリミングされ、最後にサムネイルが生成されますが、このような処理中、ユーザーは待つことしかできないため、ユーザーエクスペリエンスは非常に悪いです。
おそらく、ユーザーは初めてこの画像アップロード機能を使用すると、次回からこの画像アップロード機能を使用するのが難しくなるでしょう。
では、これらのプロセスをバックグラウンドでゆっくり実行する方法はあるのでしょうか?
答えは「はい」です。分散処理により、これらの時間のかかるタスクをバックグラウンドに配置したり、複数のサーバーに分散して処理したりすることができます。この問題には非同期処理が役立ちます。
ActiveMQ、Hadoop、Gearman、MecacheMQ など、非同期通信を実現できるオープン ソース ソフトウェアは数多くありますが、これらは計算を他のサーバーに巧みに転送し、これらはすべて API に隠されています。同時に、これらのメカニズムはクロスランゲージです。PHP を使用してタスクを割り当て、バックグラウンドの C/C プログラムを使用してそれを処理することもできますが、これは問題ありません。
以下では、php と Gearman を使用して非同期処理プロセスを示します。
1. Gearman のインストール
tar zxvf gearmand-0.11.tar.gz cd gearmand-0.11 ./configure --prefix=/usr/local/gearman make make install
2. のインストールGearman PHP 拡張機能.
tar zxf gearman-0.6.0.tgz cd gearman-0.6.0 phpize ./configure make
モジュール ディレクトリにある gearman.so を php のモジュール ディレクトリにコピーします。私のマシンのディレクトリは /usr/lib/php5/20060613 lfs/.
# です。 ## cp module/gearman.so /usr/lib/php5/20060613 lfs/.次に、
extension = “gearman.so”を php.ini に追加し、最後に Apache サーバーを再起動します。 .
3. Gearman サービスを開始します
cd /usr/local/gearman/sbin ./gearman -d -u rootジョブのデフォルトのポートは 4730 で、
[root@serv_1 sbin]# netstat -nl | grep 4730 tcp 0 0 :::4730 :::* LISTEN.
で開始できます。
Through bin/ gearman を使用すると、Gearman の機能を体験できます。Start Worker:
./gearman -w -f wc -- wc -l & [1] 2547
Run Client:
./gearman -f wc < /etc/passwd 38上の例では、関数 wc がワーカーに定義されています。その主な機能は、テキストの行数をカウントすることです。クライアントは、処理のために /etc/passwd ファイルの内容をワーカーに渡します。最終的に、passwd には 38 行のテキストがあると結論付けられます。
以上がPHPで時間のかかるタスクを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。