カテゴリー
log

リアルタイムWebメモ

元記事:

リアルタイムWebを構築しやすくする「Socket.IO」とは (1/4):CodeZine.

リアルタイムWeb技術いろいろ

1.HTTPやJSONPによるポーリング

  • 最もシンプル、あらゆる環境で使える
  • AjaxによるHTTPリクエストを繰り返しているだけ(定期的にチェックしてるだけ)
  • ネットワーク帯域とサーバリソースを無駄に消費してしまう
  • スケールしない

2. Comet(HTTP StreamingやHTTP Long polling)

クライアントから送信されてきたHTTPリクエストをサーバが維持し、サーバーからPUSHすべきイベントの発生(もしくはリクエストのタイムアウト)を契機にHTTPレスポンスを返す

  • サーバがブラウザとのHTTPコネクションを維持
  • イベント発生時に即座にサーバからブラウザへデータをPUSH

3. プラグインによるSocket接続

  • Adobe FlashやMicrosoft Silverlightなどを使った接続
  • リアルタイム性が高くバイナリデータの送受信も可能
  • 1、2のようにHTTPプロトコルの制約をうけないため、無駄な再接続もなく効率的
  • 独自ポートで通信するためにネットワーク経路上にプロキシやファイアウォールがあると接続できない

4. WebSocket

RFC6455として規格化されている「双方向通信用」のプロトコル

  • 3と同様、接続が確立した後は全二重通信を行うことができ、バイナリデータの送受信も可能
  • クライアント側のプログラムもJavaScriptで記述することができる
  • ポートもHTTPやHTTPSで利用する80や443に相乗りでき、ファイアウォールの制約をうけない
  • モダンブラウザでないと機能しない
  • 要暗号化

Socket.IOとは

「リアルタイムWeb技術の実装方式を隠蔽し、すべてのブラウザ・モバイルデバイスでリアルタイム通信を可能とすること」を目指して開発されている、node.js用サーバ側ライブラリとブラウザ用JavaScriptライブラリのセット

  • 現バージョンでは、1〜4の方法に対応しており、Socket.IO APIで透過的に利用可能
  • IE5.5といった古いブラウザからiPhone/Androidのブラウザまで、幅広いブラウザでリアルタイム双方向通信が可能
  • 拡張され、JavaScript以外の言語でもSocket.IO APIが利用できるようになってきている