Comet + Rails がおもしろい!
今更ながらCometに挑戦。
Cometというのは…
Comet(コメット)とは、Webアプリケーションを構築する際に利用される技術で、この技術を使うと、サーバで発生したイベントをクライアントからの要請なしにクライアントに送信することができる。
Comet - Wikipedia
ニコニコ動画などのように、こっちからのリクエストがなくてもサーバからメッセージが飛んでくるあれです。
そのCometをRailsで挑戦。
ちょっと遊んでみたけど面白い!
思ったより簡単だったので、メモ。
まずは、環境構築。
今回はgem"Juggernaut"を使用します。
Juggernaut http://juggernaut.rubyforge.org/
前提条件
- Windows Vista Business
- 他のOSは未検証
- Rails 2.0以上
gemインストール
以下3つのgemをインストールします
- json
- eventmachine
- juggernaut
>gem install json Successfully installed json-1.1.6-x86-mswin32 1 gem installed Installing ri documentation for json-1.1.6-x86-mswin32... No definition for cState_configure No definition for cState_configure Installing RDoc documentation for json-1.1.6-x86-mswin32... No definition for cState_configure No definition for cState_configure >gem install eventmachine Successfully installed eventmachine-0.12.6-x86-mswin32-60 1 gem installed Installing ri documentation for eventmachine-0.12.6-x86-mswin32-60... Installing RDoc documentation for eventmachine-0.12.6-x86-mswin32-60... >gem install juggernaut Successfully installed juggernaut-0.5.7 1 gem installed Installing ri documentation for juggernaut-0.5.7... Installing RDoc documentation for juggernaut-0.5.7...
Railsプロジェクト作成
>rails comet_test >cd comet_test
plugin "juggernaut_plugin" をインスコ
>ruby script/plugin install git://github.com/maccman/juggernaut_plugin.git Initialized empty Git repository in c:/rbc/comet_test/vendor/plugins/juggernaut_plugin/.git/ remote: Counting objects: 28, done. remote: Compressing objects: 100% (25/25), done. remote: Total 28 (delta 3), reused 12 (delta 0) Unpacking objects: 100% (28/28), done. From git://github.com/maccman/juggernaut_plugin * branch HEAD -> FETCH_HEAD Installing Juggernaut... Juggernaut has been successfully installed. Please refer to the readme file c:/rbc/comet_test/vendor/plugins/juggernaut_plugin/README
コントローラ作成
>ruby script/generate controller comet index connect
exists app/controllers/
exists app/helpers/
create app/views/comet
exists test/functional/
create test/unit/helpers/
create app/controllers/comet_controller.rb
create test/functional/comet_controller_test.rb
create app/helpers/comet_helper.rb
create test/unit/helpers/comet_helper_test.rb
create app/views/comet/index.html.erb
create app/views/comet/connect.html.erb
コントローラ修正
APP_ROOT\app\controllers\comet_controller
太線部を追記
class CometController < ApplicationController
def index
end
def connect
Juggernaut.send_to_all("alert('hi from juggernaut')")
end
end
ビュー作成
APP_ROOT\app\views\comet\index.html.erb
こんな感じで書いていきます
<html> <head> <%= javascript_include_tag :defaults, :juggernaut %> </head> <body> <%= juggernaut %> </body> </html>
サーバ起動
まずはcometサーバの起動
>juggernaut -g config\juggernaut.yml Generating config file.... Config file generated at c:/rbc/comet_test/config/juggernaut.yml >juggernaut -c config\juggernaut.yml Starting Juggernaut server on port: 5001...
つづいてRailsサーバ起動
>ruby script/server => Booting Mongrel => Rails 2.3.2 application starting on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server
確認
複数のブラウザ(FireFox、IE、Google Cromeなど)を起動して以下のURLを入力
http://localhost:3000/comet
その状態で別のブラウザを起動して以下のURLを入力
http://localhost:3000/comet/connect
既に開いている画面でこんなカンジのアラートが表示されたらオッケー
- crome
- firefox
解説は気が向いたら
参考