Kodougu で comet を実装する必要があるのですが、自分で実装するのもしんどいので、cometd を使ってみることにしました。

■ 注意
本記事は、cometd の trunk のヘッド(2007/5/7 時点)を参照しながら書いています。あなたが読んでいる時点で、本記事の情報が古くなっている可能性があります。

■ 環境
Windows XP SP2

■ 準備(必要なソフトウェアのインストール)
1. Python 2.4.4(インストーラあり、EasyInstall もインストールすべし)
Python Japan User's Group

※ EasyInstall のインストール方法は少し下のほうに記述してあります。

2. Twisted Python 2.4.0(インストーラあり)
http://twistedmatrix.com/trac/
※ 最新の 2.5.0 では、Twisted Web2 との互換性の問題で、正常に動作しません。

3. Twisted Web2 0.2.0 のインストール
http://twistedmatrix.com/trac/wiki/TwistedWeb2
python setup.py install

4. simplejson 1.7.1(EasyInstall でインストール)
http://cheeseshop.python.org/pypi/simplejson
easy_install simplejson

5. path 2.2
http://www.jorendorff.com/articles/python/path/
python setup.py install

6. cometd のインストール
6.1. cometd のチェックアウト
以下のアドレスからチェックアウトしてください。
http://cometd.googlecode.com/svn/trunk/
6.2. cometd-twisted フォルダ内の setup.py を書き換えてください。
data_files という項目を、「/etc/cometd」から「scripts」に書き換えてください。
6.3. setup.py の実行
python setup.py install
6.4. cometd.tac の編集
<<Python Install Dir>>\scripts\cometd.tac で設定(ポートやログファイルなど)を変更することができます。必要に応じて編集してください。

正直、Python に詳しくないと、きついと思います。私は Python にはまったく詳しくないので、この辺は結構きついです。わかりにくいところは質問してください。

補足:EasyInstall のインストール
x.1. 以下のファイルをDL
http://peak.telecommunity.com/dist/ez_setup.py

x.2. 以下のコマンドを実行
python ez_setup.py

■ cometd の起動
<<Python Install Dir>>\scripts フォルダ内で以下のコマンドを実行してください。
twistd -noy cometd.tac

補足:原因不明のエラー
私の環境では、<<Python Install Dir>>\Lib\site-packages\twisted\python\log.py の 228 行目をコメントアウトしないと、正常に動作しませんでした。原因については、現在調査中です。
# err()


dojo(0.4.2)からの呼び出し
Publisher/Subscriber モデルになっているので、簡単に使うことができます。以下におおよその使い方を書きますが、cometd の exmaples に dojo を使った例が豊富にあるので、参照しながら進めるようにしてください。

1. dojo.io.cometd の読み込み
dojo.require("dojo.io.cometd");

2. dojo.io.cometd の初期化
cometd.init({}, "http://127.0.0.1:8080/cometd")
※ 第一引数は、オプション設定。何が設定できるのかは不明。調査中。
※ 第二引数は、cometd サーバの URI。

3. 購読開始
cometd.subscribe("/channel/name", true, this, "acceptMethod")
※ 第一引数は、購読するチャンネル名。
※ 第二引数は、調査中。false にするとチャンネル名の先頭に "/cometd" が付加されるが何の意味があるのか・・・。
※ 第三引数は、メッセージ受信時のスコープになるオブジェクト(だと思う。。。)。
※ 第四引数は、メッセージ受信時のメソッド名。

4. メッセージの配信
cometd.publish("/channel/name", {name: "hoge"})
※ 第一引数は、配信先のチャンネル名。
※ 第二引数は、配信データ。

補足:IE、Opera で、Syntax Error が出る場合
以下のファイルの 510 行目に「}), }」というような記述がある場合、「})}」というように修正してください。私はこの修正で正常に動作するようになりました。
/dojo/src/io/cometd.js

補足:FireFox を使っている場合の問題
私の環境依存の問題である可能性がありますが、同一 PC 上で、FireFox クライアントを二つ起動以上したとき、publish したメッセージをクライアントで受け取ることができないという現象が発生しました。現在、原因調査中ですが、私は IE と FireFox など異なるブラウザであれば問題は発生していないので、テストはその組み合わせで行っています。

以上、cometd の使い方でした。

Posted by あかさた
最近のエントリ
最近の読書メモ