IT土方から代表取締役になった

主に技術メモ。たまに違うことも書くかもね。

SinatraでWebsocketチャットもどき

前回はwebsocket-railsでチャットもどきを作りましたが、

諸事情によりiOSから繋げられるWebsocketサーバを作りたかったがために

websocket-railsでは難しいことが判明。

 

そこでもうちょっと汎用的なWebsocketサーバを作るべく、Sinatraで作り直しました!

参考にしたのは、herokuが公開してるこれ。

あとは、コチラのブログも参考にしました!

んで、作ったのはコチラ!

 

では解説!

まずはサーバ側から!

app.rbはただのindex表示用。今回もViewはindexのみです。

で、backend.rbがキモなところですが、まずfaye/websocketをつかって、

wsオブジェクトを生成してます。で、ws.onで各イベントの処理を記載しています。

:open はWebsocketの接続時に実行されます。

clientに保存して、チャット人数表示用のcountメッセージを全クライアントに

送信してます。あと、50個だけ過去ログ保存するようにしているので、

それも送信しています。(これは新規接続したクライアントにだけ)

 

:messageは、chatの内容ですね。受け取ったら全クライアントに送信するだけ。

 

:closeはブラウザ閉じたり、Websocket切断時の処理です。

クライアント一覧の配列から該当のクライアントを削除して、チャット人数が減るので

それを全クライアントに送信する。

 

次にクライアント側です。

チャット送信ボタンを押すか、テキストボックスでEnterを押すと、

sentMessageが実行されます。27行目にWebSocketをnewしているので

そいつに対してsendを実行するだけ。

受信はonmessageです。チョー簡単ですね。

前回のwebsocket-railsでは、メッセージのラベルに対応するメソッドを呼び出すと

いう処理が隠蔽されているので、他のクライアントから繋ぐのは難しかったのですが

今回のバージョンでは単純なJSON形式なので、サーバ側のJSON解析如何で、

いくらでも処理は追加できそうです。

 

以上!