PHPで時間のかかるタスクを処理する方法

(*-*)浩
リリース: 2023-02-25 18:02:01
オリジナル
3292 人が閲覧しました

PHPで時間のかかるタスクを処理する方法

サーバー アクセスの負荷が比較的高い場合は、負荷分散を使用して負荷を複数のサーバーに分散できますが、さらに時間のかかるリクエストがいくつかあります。例:

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 サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート