“「5分で作るチャット」を実際にやってみた”をやってみた

Comet勉強会#1発表資料-Hello, world! を読んで、一年の間にCometどうなったんだろうと思ってCometのことを調べました。その一環で 「5分で作るチャット」を実際にやってみた – Spirit of Apprenticeship (みならいだましい) をやってみたのの自分用メモです。勉強会参加したかった!

いちおう一年前の話題によくあがっていたころに調べて、けっきょくIRCサーバとおなじものをHTTPになじむように実装し直すかんじなんだろうと理解したことにしていたものの、じっさい調べてみたら目からウロコなこと多数。

Meteorのページの解説が教科書的でわかりやすい

調べていて最も役に立ったのは pure perl のcometサーバ実装の Meteor のページでした。Cometサーバを設計実装する上での検討すべき点と実装上の困難についてとてもよくまとまっていて、読めば基礎的なことはぜんぶわかります。自分はCometの通信方法にいろいろあるってるというのを知らなくて Interaction modes のページに載っている図解と解説に感動しました。自分が知ってたのは short polling (long-lived connectionはこれにあたるんでしょうか)で、ほかにもだいたい2種類あって、それぞれのパフォーマンス上の利点と、利用上の困難が教科書的に書かれていて理解しやすかったです。Browser techniques は実装レベルの話で、throbberが回りっぱなしになるのをどう回避するかについて書かれています。(こいつがハックにハックを重ねてなんとかしていて涙ものです)
インストールして動かしてテストしてみるのも Installation に書いてあるのを適当にはしょってやればできるので ShootingStar, cometd とくらべてかんたんです。

ShootingStarのインストール&セットアップ

以下本題。
まずrailsが入っていないので pylori*style wiki – RailsのInstall を参考にインストール。rubyは入れてたのでruby-gemsから。subversionも入ってなかったので入れてます。

cd /usr/ports/devel/ruby-gems; sudo make install
cd /usr/ports/devel/apr-svn; sudo make install
cd /usr/ports/devel/subversion; sudo make install
sudo gem install rails --include-dependencies

あとは 「5分で作るチャット」を実際にやってみた – Spirit of Apprenticeship (みならいだましい) に従ってやれば完成。
RoR知ってれば分かるのかもしれないけど一カ所だけ分かりにくかったのは、最後の

<確認>
1. ブラウザを二つ開く

のところで開くURLが分からなかったところ。5分ぐらいでCometを使ったChatを作る方法-Hello, world! を見て http://localhost:3000/chats を入れればいいというのが分かりました。

この – ってYAMLのアタマに必要なの?必要ないの?っていうくらいのシロウトがdbの設定を書き間違ったり、テンプレートを書き間違ったりしながらやっても15分でチャットが動くようになりました。

Meteorはとりあえず動かしてみるのは簡単ですが、実際にまともなものとして動かすところに持ってくのはわりとめんどうそうなので(だってWebサーバ -> Cometサーバの通信インターフェイスがHTTPもどきの変なやつなんだもん)、とりあえずCometでチャットを用意したいときにはShootingStarです。

Comet雑感

SFWの資料だけでわからなかった部分が分かって納得。flashを使ってるときはよくわからないけど、そうでないときのブラウザから見た構成は、ひとつのコネクションでCometサーバ(ShootingStar)に繋いでpollingしつつ、メッセージを送りたいときはAjaxでport 80(WEBrickだったら3000)にPOSTしてるので、Meteorと同じ。この構成が一番合理的ということか。
HTTPサーバにPOSTされたデータをどうやってCometサーバに渡すかは、ちょっと違っててMeteorではそもそも用意されていないので自分で実装する必要がある。ShootingStarの場合はdrubyで渡してる。

cometdはどう動かすか書かれていなかったのでヘタレな自分は調べてません。
でもShootingStarもMeteorもだいたいの設計において同じということは、いまのところはこいう設計にするのがCometサーバの答えということなのか。1年経ってあんまり考えなくても使えそうになっている印象を受けました。


About this entry