SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所

リアルタイムWebを構築しやすくする「Socket.IO」とは

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所 第1回


プラグインによるSocket接続

 3つ目はプラグインによるSocket接続です。Adobe FlashやMicrosoft Silverlightなど、ブラウザにアドオンされた独自プラグイン上のクライアントプログラムから、サーバへSocket接続して通信します。

 サーバ側、プラグイン側ともに通常のSocket通信プログラムなので、リアルタイム性が高くバイナリデータの送受信も可能です。また上述したポーリングやCometのような「HTTPプロトコルの制約」を受けないため、無駄な再接続もなく効率的です。

 ただしプラグイン上にクライアントプログラムをロードするため、企業ユーザなどプラグインのインストールが禁じられている場合はそもそも利用できません。またHTML、JavaScript、CSSとは異なる各プラグイン独自の技術要素が必要になりますし、独自ポートで通信するためにネットワーク経路上にプロキシやファイアウォールがあると接続できない場合が多いのが難点です。

WebSocket

 最後はWebSocketです。WebSocketはRFC6455として規格化されている「双方向通信用」のプロトコルであり、上述したポーリングやCometのような再接続を必要とする「重い仕組み」を打破する目的で策定されました。プラグインによるSocket接続と同様、接続が確立した後は全二重通信を行うことができ、バイナリデータの送受信も可能です。

 一方、プラグインによるSocket接続とは異なり、独自プラグインのインストールを必要とせず、クライアント側のプログラムもJavaScriptで記述することができます。ポートもHTTPやHTTPSで利用する80や443に相乗りすることができるため、ファイアウォールがあっても通過しやすいことが利点です。

 ただしGoogle ChromeやFirefoxの最新版など、WebSocketに対応したモダンブラウザでなければ動作しません。またWebSocketプロトコルを暗号化しない場合、ネットワーク経路上に通信のキャッシュやバッファリングを行うプロキシなどがあると、ポート80で疎通できたとしてもWebSocket接続を確立することができません。

 http://www.websocket.org/echo.htmlhttp://websocketstest.com/にアクセスすると、自分の環境でWebSocketが利用できるか確認することができます。一度試してみると良いでしょう。

Socket.IOとは

 これまで見てきたように、リアルタイムWeb技術にはさまざまな実装があり、状況によって使い分けなければなりません。そこでSocket.IOが登場します。

 Socket.IOは「リアルタイムWeb技術の実装方式を隠蔽し、すべてのブラウザ・モバイルデバイスでリアルタイム通信を可能とすること」を目指して開発されている、node.js用サーバ側ライブラリとブラウザ用JavaScriptライブラリのセットです。現バージョンの0.9系では、WebSocket、プラグインによるSocket接続(Adobe Flash Socket)、Comet(Ajax long polling、Ajax multipart streaming、Forever Iframe)、ポーリング(JSONP Polling)に対応しており、同じSocket.IO APIで透過的に利用することができます。

 そのためSocket.IO APIを用いてサーバ側・ブラウザ側の実装を行えば、ネットワークやブラウザの状況から最適なリアルタイムWeb技術が選択され、IE5.5といった古いブラウザからiPhone/Androidのブラウザまで、幅広いブラウザでリアルタイム双方向通信が可能です。利用できるリアルタイムWeb技術とサポートしているブラウザの詳細はSocket.IO browser-supportを参照してください。複数のブラウザから異なるリアルタイムWeb技術で同時に接続されても、問題ありません。

 またSocket.IO-Java(Socket.IO APIを実装したサーバ側Javaライブラリ)やsocket.io-java-client(Socket.IO APIを実装したクライアント側Javaライブラリ)など、サーバ側・クライアント側ともに、JavaScript以外の言語でもSocket.IO APIが利用できるようになってきています。さらに広がりを見せるSocket.IOは、これからも注目すべきライブラリでしょう。

次のページ
サーバ側ソースコードの解説

この記事は参考になりましたか?

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所連載記事一覧

もっと読む

この記事の著者

松井 暢之(TIS株式会社)(マツイ ノブユキ)

TIS株式会社 コーポレート本部 戦略技術センターに所属。アーキテクチャ設計やデータモデル策定、フレームワーク構築などバックエンド側のアーキテクトとしてプロジェクトに従事していたが、現部門への異動を契機に戦略技術の検証や新規サービスの事業企画に軸足を移す。近頃はなぜか、インフラ・運用のパターン化と自動化を目...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7075 2013/07/17 16:22

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー