Posted at

「リアルタイムWEBを実現する技術」の触りを知っておく為のまとめ

More than 5 years have passed since last update.


概要

socket.ioについて周辺技術の触りをまとめておく

これだけ知ってれば後から調べやすいはず


覚えること


  • Socket.io

  • Websocket

  • ノンブロッキングI/O

  • node.js


Socket.ioって何?

Socket.ioのページを参照

「Socket.IOは、リアルタイム双方向イベントベースの通信を可能にします。」

「これは、信頼性とスピードに均等に焦点を当て、すべてのプラットフォーム、ブラウザやデバイス上で動作します。」

解りにくいので簡単に書くと

幾つかの通信方式とサーバー、ブラウザ、デバイス間の通信を抽象化してくれるライブラリでいいはず


Socket.ioが対応している通信方式

Socket.IO protocol


  • xhr-polling

  • xhr-multipart

  • htmlfile

  • websocket

  • flashsocket

  • jsonp-polling

抽象化しているので意識せずにこれらが使えるということ

リアルタイムWebを構築しやすくする「Socket.IO」とは見れば触りは解る

詳しく知るなら下記がよさそう


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を始める


他おすすめ