BlazeDSをPHPから呼び出す。

微妙に成功した。

<用意するもの>
Quercus(JavaによるPHP実装)
BlazeDS

<Quercusのインストール>
以下を参照のこと。
Blog de fabien

<具体的な呼び出し方>
BlazeDSのAPIはPHPから直接呼べたものの、web.xmlの情報などを継承できていない(?)のか、
メッセージを飛ばすときに「指定されたDestinationは存在しない」とか言われた。
しょうがないのでJavaのラッパーを呼ぶ形にしている。
JRubyならできているらしいのだが・・・。

<検証ソース>※BlazeDSのサンプル「testdrive-chat」用。

■BlazeDSのAPIを呼ぶJavaのソース
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import flex.messaging.MessageBroker;
import flex.messaging.util.UUIDUtils;
import flex.messaging.messages.AsyncMessage;

public class BLZ_MessageBroker {
public void routeMessageToService(String dest, Object message) {
MessageBroker msgBroker = MessageBroker.getMessageBroker(null);
String clientID = UUIDUtils.createUUID();
AsyncMessage msg = new AsyncMessage();
msg.setDestination(dest);
msg.setClientId(clientID);
msg.setMessageId(UUIDUtils.createUUID());
msg.setTimestamp(System.currentTimeMillis());

msg.setBody(message);
msgBroker.routeMessageToService(msg, null);
}
}

■ラッパーAPIを呼び出すPHPのコード
<?php
import flex.messaging.MessageBroker;
import flex.messaging.util.UUIDUtils;
import flex.messaging.messages.AsyncMessage;

$response->setContentType(“text/html; charset=UTF-8”);

$message = “Hello from PHP.\n”;
$blz = new BLZ_MessageBroker();
$blz->routeMessageToService(“chat”, $message);
?>

それぞれを配置したらtestdrive-chatのページを開いておき、
別のブラウザで配置したPHPにアクセスすると「Hello from PHP.」と表示される。

<Quercusの現状の問題点>
・なぜかweb.xmlの情報などを継承できていない(?)
・Javaのメソッドをオーバーライドできない(?)ので、結局Javaコードを書く羽目になる。
・PHP5相当だが、ライブラリなどの実装が不完全。(PDOなど一通りある模様)
※実装状況はこのページを参照のこと。

<まとめ>
あまりスマートではないものの、
これでPHPを使ってサーバープッシュ型のコンテンツが作れるならば挑戦してみる価値はあると思う。

ていうか、そもそもの目的は1分単位の精度で
メールが届いたことを知らせたいだけだったんだけど、大げさだな。
素直にIFRAMEリロードかAJAXでやろうかなあ。
COMETはなんかプロトコルのトリックをつついてるみたいで、
ブラウザの仕様変わったら使えなさそうで嫌だし・・・。

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です