0

時間のかかるタスクに Gearman を使用したい PHP アプリケーションがあります。いろいろ検索した結果、クライアント クラスとワーカー クラスを含む PHP API として Net_Gearman を見つけました。

Net_Gearman を使用するには、次に何をすればよいですか? Linux と Perl の知識はありません。

4

1 に答える 1

4

いくつかのことを理解してください ( https://github.com/lenn0x/net_gearmanからのいくつかのメモと、Gearman の仕組みに関する私自身の知識を使用しました) 。

  • まず最初に、Linux マシンに Gearmand が正しくインストールされ、実行されていることを確認する必要があります。

    Ubuntu - http://www.lornajane.net/posts/2011/installing-gearman-for-php-and-ubuntu

    Centos/Redhat - シンプルsudo yum install gearmand libgearmanでうまくいくはずです。ソースからのインストールに関するガイドは数多くあります。あなたはおそらくそれをしたくないでしょう。

クライアント:

Gearmand プロセスに接続してジョブを送信するクライアント スクリプトを作成します。

require_once 'Net/Gearman/Client.php';

$client = new Net_Gearman_Client('localhost:7003');
$client->someBackgroundJob(array(
    'userid' => 5555,
    'action' => 'new-comment'
));

としょうかん:

実際のジョブ (この場合は someBackgroundJob) を処理するライブラリ/別のスクリプトを作成します。

<?php

class Net_Gearman_Job_someBackgroundJob extends Net_Gearman_Job_Common
{
    public function run($args)
    {
        if (!isset($args['userid']) || !isset($args['action'])) {
            throw new Net_Gearman_Job_Exception('Invalid/Missing arguments');
        }

        // Insert a record or something based on the $args

        return array(); // Results are returned to Gearman, except for 
                        // background jobs like this one.
    }
}

?>

ワーカー:

最後に、このジョブを処理するワーカーが必要です。必要に応じて、処理するジョブがなくなるまで毎分実行する cron にすることができます。その時点で、別のジョブを取得するまでそこでハングアップする必要があります。

<?php

require_once 'Net/Gearman/Worker.php';

$worker = new Net_Gearman_Worker('localhost:7003');
$worker->addAbility('someBackgroundJob');
$worker->beginWork();

?>

トラブルシューティング

サーバーで Gearmand が実行されていることを確認します。Linux ターミナルで次のコマンドを実行できます。

[root@dev7 ~]# ps aux | grep gearman nobody

1826  0.0  0.1 406792  2236 ?        Ssl  Aug18  10:00 gearmand -d -u nobody -L 0.0.0.0 -p 4730 -P /var/run/gearmand/gearmand.pid -l /var/log/gearman/log root 4320  0.0  0.0 103240   944 pts/2    R+   16:16   0:00 grep --color=auto gearman
  • Gearman が実行されている場合は、上記のようにプロセスが実行されているはずです。そうでない場合は、起動する必要があります... Ubuntu: service gearman-job-server startCentos/Redhat:service gearmand start
  • キューにあるジョブを確認してください。以下を実行します。

    (echo status ; sleep 1) | nc 127.0.0.1 4730
    

これは、ギアマンド サーバーが同じマシン上で実行されており、netcatインストール済みであることを前提としています。

于 2013-08-26T16:23:48.063 に答える