node.jsでフルスタックMVCフレームワークではSailsが一番素晴らしいと思っている私です。
最近はGruntからGulpに置き換えたり、CoffeeScriptで書いたりしています。
経緯
・Socket.ioを使おうとした
・サンプル通りにやっても動かない
・ドキュメントが整理中でまともに機能してない
・ソースコードリーディングした
・解決!
本題
SailsにはblueprintsというModelを定義するだけでREST APIを作成することができるツールがあります。
これは、最近のモダンなフレームワークにならよくある機能かと思います。
このREST APIを生成出来る機能がsails.io
と併合して、より使いやすくなりました。
まず、sails.io.js
をscriptタグで読み込んでおくのが前提です。
そしたらブラウザでログを開いてみましょう。
舟のAAが表示されていれば接続完了です。
特に何もコードを書いていなくてもブラウザのログに表示されるかと思います。
もし表示されなかったり、表示されるまで時間がかかった場合は、WebSocket非対応か、Nginxなどでリバースプロキシを使用している際にheaderを削ってしまっている可能性があります。
それでは早速socketを使ってみましょう。
まずは普通にAPIを叩いてみましょう。
通常はjquery等のXHRを使ったり、AngularJSの$httpのようなものを使用するかと思います。しかし、これらは毎回TCPのコネクションを使用するため、あまりモダンではありません。
SailsではREST APIをblueprintsを通してsocketを使って取得することができます。
io.socket.get "/st?limit=0", (msg)->
console.log msg
普通にGETを叩くときのように使用出来ます。
大量のAPIを叩くときもsocket.ioを使用して通信するため、非常にモダンな感じになります。
また、modelの変更情報も簡単に取得することができます。
io.socket.on "st", (msg)->
console.log msg
もうお気づきかもしれませんが、普通にhttpで叩いた時と同じデータが返ってくるので、pathにパラーメーターを追加して、より細かく待ち受けることができます。
また、Socket.ioの要であるroom機能もラップされて実装されていますので、詳しくは公式ドキュメントを御覧ください。
http://sailsjs.org/#/documentation/reference/websockets/sails.sockets/sails.sockets.join.html