websocket-railsでチャットもどき
websocket-railsを使ってチャットもどきを作ってみました。
超絶参考にしたのはこのブログです。
あとはgithubのこの人のチャットシステムはすごーく参考になりました。
で、とりあえず作ったものはここに。
では解説!
まずはサーバ側から。
PublicControllerははただのindex表示用ですね。
で、configのevents.rbでクライアントのラベル(ここだと:new_message)に大して
どのコントローラの、どのメソッドを呼ぶか、というのを設定します。
これだとChatControllerのnew_messageメソッドが呼ばれるということですね。
んで、 ChatControllerを見ると、initialize_sessionとnew_messageのメソッドがありますね。
initialize_sessionはWebsocket接続時に呼ばれるメソッドです。
とりあえず標準出力してるだけ。
で、new_messageをみると、putsはただのデバッグ用出力なので気にしないとして
broadcast_messageを呼び出して、接続中の全てのクライアントに対して、
:new_messageというラベルとメッセージ内容(messageの変数に入ってます)を
送信してるだけです。
ではクライアント側を見てみましょう。
参考元のソースほぼそのままですね。サーセンww
4行目でdispatcherにWebSocketRailsをnewしてます。
あ、ちなみにurlはindex.html.erbから取得してますよ。
でbindEvents()で、イベントを監視します。
まずメッセージ送る方はsendMessageメソッドでさすね。
サーバへなんか送るときは@dispatcher.triggerを使います。
で、new_messageのラベルと、メッセージ内容をJSON形式で送ってます。
new_messageのラベル付けることで、前述したサーバ側で対応するメソッドが
呼び出されるということですね。
このラベルの種類を増やすと色々やれるような感じです。
で、サーバ側から受け取るのは@dispatcher.bindです。
単純にhtmlにappendしてるだけです。ざっとこんな感じです。
websocket-rails使うと、かなり簡単にwebsocketを使ったWebアプリが作れますね!
ただし、このgemはクライアントとサーバをセットで使うことが前提なので
他のデバイスからも接続できるような汎用的な用途としては向いてません。
※パケットキャプチャしてみると、pingpongも独自に設定されているようなので。