自宅でPubsubhubbubのPub,Sub,Hub一式を動かしてみた
とりあえず自宅のMacでPubsubhubbubが動いたのでメモ
環境
- Mac OS X 10.5.8
- Python 2.5.2
- Google App Engine SDK for Python 1.2.4 - 08/06/09
Pubsubhubbubのソースをチェックアウト
GoogleCodeでホストされているリポジトリからPubsubhubbubのソース一式をチェックアウト
$ svn checkout http://pubsubhubbub.googlecode.com/svn/trunk/ pubsubhubbub-read-only
Hub,Publisher,Subscriberを起動する
Pubsubhubbubには以下のようなディレクトリがあり、それぞれHub,Publisher,Subscriberのリファレンス実装がGAEアプリ(Python)として実装されている。
-
- hub/
- publisher/
- subscriber/
以下のようにターミナルを3つ立ち上げて、それぞれのディレクトリ配下で以下のとおりアプリを起動する。
まずHub
$ dev_appserver.py hub
Running application pubsubhubbub on port 8080: http://localhost:8080
とかってメッセージが表示されればHubの起動は成功。
つぎにPublisher
$ dev_appserver.py --port=8081 publisher
GAEアプリケーションはデフォルトだと8080ポートを使用するので、明示的に--port=8081
としてHubとポートが競合するのを避けている。
最後にSubscriber
$ dev_appserver.py --port=8082 subscriber
これも同じようにポートの競合が起きないよう--port=8082
を指定してに起動する。
Hubサーバのページをブラウザで開いてみる
http://localhost:8080/にブラウザでアクセスしてみる。
以下のように表示された。
実際にGAEでホストされているのとほぼ同じ画面だ。
Subscriber:フィードを購読する
上記ページを下にスクロールすると、以下のようにデバッグ用のリンクが現れる。
このリンクの"Subscribe"のリンクを開くとSubscriberを登録するフォームが現れる。
以下のようにフォームを入力し"Do it"のボタンをクリック
ブラウザ上に何も変化が無いので不安になるが、
Hubのコンソールに以下のように表示されていれば、Subscriberの登録はOK
INFO 2009-09-02 17:49:10,836 main.py:1393] Subscription action verified: subscribe INFO 2009-09-02 17:49:10,846 dev_appserver.py:3029] "POST /subscribe HTTP/1.1" 204 -
ちなみにsubscriberのコンソールには以下のように出力されており、Hubから購読確認のリクエストが飛んできていたことが確認できる。
INFO 2009-09-02 17:49:10,818 dev_appserver.py:3029] "GET /subscriber.1?hub.verify_token=hoge&hub.challenge=Jf7d7Gd5rzluchT_Flmh3nHaAfEKCoNz6_nASQRCRJSMCrlO6vet0OE6mLHGZ1j6ctYFDp0wXXpYA-Ej6qu_PBKF7PthTHudiW6w8BYYS9kvRVyvUBzsLsz5qZXsf9FS&hub.topic=http%3A%2F%2Flocalhost%3A8081%2Ffeed&hub.mode=subscribe&hub.lease_seconds=2592000 HTTP/1.1" 200 -
Subscriberが登録できたら、http://localhost:8082/
をブラウザで開いてみる。
Publisherでフィードの更新が発生したらこのページにフィードがすぐさま反映されるはずだが、まだPublishしてないので、何も表示されていないはず。
とりあえず、このページは開いておく。
Publisher:フィードを生成しHubに更新を通知する
subscriberの準備ができたので、Publisherで新しいエントリをパブリッシュしてみる。
http://localhost:8081/
をブラウザで開く。
すると、簡単なメッセージ入力フォームが表示されるので適当に入力して"submit"をクリック
下のほうの"Previous message"ってところに、入力した内容が表示されればメッセージの登録完了。
次に、Hubに対してフィードが更新されたことを通知する。
http://localhost:8080/のページを開いて、画面下部の"Publish"のリンクを開く。
すると、PublishするフィードをHubに通知するためのフォームが現れるので、以下のように入力して"Publish"
Hub:Publisherの更新通知を受け取りSubscriberに通知する
本来なら、この時点でHubがフィードを収集して、それぞれのSubscriberに更新を通知するはずだけど、開発サーバ上であるためか、いくつか手作業で処理を実行する必要があった。
Subscriber:受信したフィードの確認
で、先に開いておいたSubscriberのページhttp://localhost:8082/
を確認すると、以下のようにPublisherからのフィードが受信できていることが確認できる。
手動でタスクを動かさないといけないのであんまり「リアルタイム感」が無いけど、とりあえずPubsushubbubの一式が動くの確認できた。
疑問
- 開発サーバではTask Queueは手動で処理するしかないのかなぁ?