概要
socket.ioについて周辺技術の触りをまとめておく
これだけ知ってれば後から調べやすいはず
覚えること
- Socket.io
- Websocket
- ノンブロッキングI/O
- node.js
Socket.ioって何?
Socket.ioのページを参照
「Socket.IOは、リアルタイム双方向イベントベースの通信を可能にします。」
「これは、信頼性とスピードに均等に焦点を当て、すべてのプラットフォーム、ブラウザやデバイス上で動作します。」
解りにくいので簡単に書くと
幾つかの通信方式とサーバー、ブラウザ、デバイス間の通信を抽象化してくれるライブラリでいいはず
Socket.ioが対応している通信方式
- xhr-polling
- xhr-multipart
- htmlfile
- websocket
- flashsocket
- jsonp-polling
抽象化しているので意識せずにこれらが使えるということ
リアルタイムWebを構築しやすくする「Socket.IO」とは見れば触りは解る
詳しく知るなら下記がよさそう
- [リバース Ajax: 第 1 回 Comet の紹介](http://www.ibm.com/developerworks/jp/web/library/wa-* reverseajax1/)
- リバース Ajax: 第 2 回 Comet の紹介
- リバース Ajax: 第 3 回 Comet の紹介
Socket.ioのバージョンはどれを使うの?
HOMEのIn other languagesを参照
主に0.9が主流で1.0以降の対応が遅れている
History.mdを見ると1.0.0のリリースは2014-05-28となっている
Socket.io 0.9から1.0で改善されたこと
- 初回接続速度の問題を修正
- 同時接続数、データストアが改善されスケールがしやすくなった
Socket.IO 1.0の変更点・内部的な話を参照
0.9から1.0ではプロトコルが違うので移行時に障壁がある
Websocketって何?
websocketはTCPソケットを利用、HTTPリクエストではない
- 強力な双方向通信
- 低レイテンシー(デバイスに対し転送要求をしてから、結果返送までの遅延時間)
- エラーも簡単に処理できる
WebSocket互換API
内部的にはsocket.send(data) と socket.on('message', callback) を使用。
send() は内部的には eventname を 'message' に固定しているだけ。
Socket.IO API 解説から引用
ノンブロッキングI/Oって何?
コンピュータ内部のCPUと周辺装置のデータ入出力(I/O)において、データの送受信の完了を待たずに他の処理を開始する方式。並列処理の一種。(IT用語辞典 e-wordsから引用)
ノンブロッキングI/Oを使う理由
従来のスレッド生成モデルだと接続毎にスレッド立てるのでメモリ消費が多い。
接続が増えても1スレッドで非同期で処理するイベントループの仕組みの方がメモリ消費が抑えれるメリットがある。
node.jsの特徴
- サーバーサイドのJavaScriptインタープリター
- ノンブロッキングI/O
- GoogleのV8 VMを実行環境に使うので高速
node.jsを始める
- [Nodeビギナーズブック]
(http://www.nodebeginner.org/index-jp.html)を読むのをおすすめします