PHP で非同期処理(キューイング)

beanstalkd というジョブキュー管理サーバを使って PHP で非同期処理をしてみる。Ubuntu 10.04 にはパッケージが用意してあった。

beanstalkd のインストール:

 $ sudo aptitude install beanstalkd

/etc/defaults/beanstalkd を編集:

# ↓以下のオプションを有効にするとジョブを永続化できる。
# DAEMON_OPTS="-b /var/lib/beanstalkd"

START=yes

beanstalkd を起動:

 $ sudo /etc/init.d/beanstalkd start

PHP 用クライアントライブラリは、
http://github.com/pda/pheanstalk
から取得。Pure PHP なので、ビルドにハマる心配がないのがいい。

どこかにダウンロードしたファイルを展開するだけで利用可能。
今回は、git を使ってみた。

 $ git clone http://github.com/pda/pheanstalk.git

メッセージを投げる:

<?php
require_once 'pheanstalk_init.php';

$pheanstalk = new Pheanstalk('127.0.0.1');

$pheanstalk->useTube('testtube')->put("ジョブメッセージ\n");

メッセージを受信する:

<?php
require_once 'pheanstalk_init.php';

$pheanstalk = new Pheanstalk('127.0.0.1');

$job = $pheanstalk->watch('testtube')->ignore('default')->reserve();
echo $job->getData();
$pheanstalk->delete($job);