LoginSignup
6
6

More than 5 years have passed since last update.

SailsのSocket周りが色々と変更になってたメモ

Posted at

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

6
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6