Socket.IOは、Node.js サーバーとクライアントの間のリアルタイム通信を提供するライブラリです。
Node.jsサーバー用とブラウザ用のJavascriptクライアントライブラリがあります。サーバーとクライアントどちらにもインストールされていると双方向通信が可能になります。データはさまざまな形式で送信できますが、JSONが最もシンプルです。
基本的には、利用可能な場合はWebSocketを使用しますが、Flash Socket、AJAX Long Polling、AJAX MultipartStreamなどの他のテクノロジーにフォールバックする準備ができています。これにより、WebSocketがサポートされていないコンテキストでSocket.IOを使用できるようになります。
##WebSocketとの違い
-
WebSocketとは異なり、Socket.IOを使用すると、接続されているすべてのクライアントにメッセージをブロードキャストできます。
-
WebSocketは接続が切れると自動的に再接続されることはないが、Socket.IOは自動的に再接続する。
-
Socket.IOは使用するのが簡単。
-
ブラウザへの要求は、WebSocketの場合は、①HTMLページのリクエストと②WebSocketへの接続のみであるが、Socket.IOの場合は、①HTMLページのリクエストと②WebSocketへの接続、③Socket.IOクライアントライブラリ、④Ajax等のリクエストとなっている(最近の全てのブラウザはWebSocketをサポートしているため、ネットワークトラフィックの無駄)。
##どのようなサービスに向いているのか?
- チャットアプリ
- ビデオ会議アプリ
- 通信ゲーム
マルチプレイヤーで、2人以上のユーザーが同時にプレイできるゲームを開発していると仮定します。その場合、さまざまな理由でHTTPまたはHTTPS呼び出しを行うことはありません。その理由のひとつは、パケットサイズが大きいことと、これらの呼び出しが非常に遅いことです。このようなシナリオでは、ソケットなどのライブラリを使用して、サーバーとの間でデータを送受信します。ソケットは非常に高速で、必要なデータパケットのみを送信できます。HTTPプログラミングを使用すると、サーバーとリアルタイムでやり取りするマルチプレイヤーゲームやアプリを作成することはできません。
##結局Socket.IOを使うべきか?
Socket.IOは、クライアントとサーバーの間に双方向のソケット接続をセットアップしたい開発者にとって優れたツールであり、使用するのは比較的簡単です。
しかし、限られた数のユーザー向けにリアルタイムアプリを使い始めたい場合は、Socket.IOが適しています。ただ、スケールが大きくなると、Socket.IOは非同期ネットワークライブラリ上に構築されているため、サーバーに負荷をかけます。
また、最初の接続がWebSocketに比べて長いです。これは、最初にロングポーリングとxhrポーリングを使用して接続を確立し、次に可能な場合はWebSocketにアップグレードするためです。
以上を踏まえると、単純なリアルタイムアプリケーションの構築を開始するには、socket.ioが適していると思いますが、スケーラブルなサービスを開発する際には他の手段を考慮したほうが良いのかもしれません。
ちなみに代替手段として、WSやSockJSなどのパッケージを選択した人も増えているみたいです。
##参照
https://itnext.io/differences-between-websockets-and-socket-io-a9e5fa29d3dc