Socket.io-internals
Socket.IO-内部
この章では、フォールバック、Socket.IOを使用した接続、イベントおよびメッセージについて説明します。
フォールバック
Socket.IOには、クロスブラウザーの問題、WebSocketの実装、ファイアウォール、ポートブロッキングなどに起因するさまざまな制約に対処する多くの基盤となるトランスポートメカニズムがあります。
W3CにはWebSocket APIの仕様が定義されていますが、まだ実装が不足しています。 Socket.IOは、このような問題に対処できるフォールバックメカニズムを提供します。 ネイティブAPIを使用してアプリを開発する場合、フォールバックを自分で実装する必要があります。 Socket.IOは、次の順序でフォールバックの大規模なリストをカバーしています-
- WebSockets
- FlashSocket
- XHRロングポーリング
- XHRマルチパートストリーミング
- XHRポーリング
- JSONPポーリング
- iframe
Socket.IOを使用した接続
Socket.IO接続は、ハンドシェイクで始まります。 これにより、ハンドシェイクはプロトコルの特別な部分になります。 ハンドシェイクとは別に、プロトコル内の他のすべてのイベントとメッセージはソケットを介して転送されます。
Socket.IOはWebアプリケーションでの使用を目的としているため、これらのアプリケーションは常にHTTPを使用できると想定されています。 この理由により、Socket.IOハンドシェイクは、ハンドシェイクURI(connectメソッドに渡される)でPOST要求を使用してHTTP経由で行われます。
イベントとメッセージ
WebSocketネイティブAPIはメッセージのみを送信します。 Socket.IOは、これらのメッセージの上に追加レイヤーを提供します。これにより、イベントを作成できるようになり、送信されたさまざまなタイプのメッセージを分離することで、アプリを簡単に開発できます。
ネイティブAPIは、プレーンテキストでのみメッセージを送信します。 これもSocket.IOによって処理されます。 データのシリアル化と逆シリアル化を処理します。
Web用の公式クライアントAPIがあります。 ネイティブ携帯電話などの他のクライアント、他のアプリケーションクライアントについても、次の手順を使用してSocket.IOを使用できます。
- ステップ1 *-上記と同じ接続プロトコルを使用して接続を確立する必要があります。
- ステップ2 *-メッセージは、Socket.IOで指定されたものと同じ形式である必要があります。 この形式により、Socket.IOはメッセージのタイプ、メッセージで送信されるデータ、および操作に役立ついくつかのメタデータを判別できます。
メッセージの形式は-
上記のコマンドのパラメータは以下で説明されています-
- Type は1桁の整数で、メッセージのタイプを指定します。
- ID はメッセージID、確認に使用される増分整数です。
- Endpoint は、メッセージの配信先となるソケットエンドポイントです…
- Data は、ソケットに配信される関連データです。 メッセージの場合、プレーンテキストとして扱われ、他のイベントの場合、JSONとして扱われます。
次の章では、Socket.IOでチャットアプリケーションを作成します。