FAQ
Socket.IO に関するよくある質問の一覧です
何かが正常に動作しません。助けてください。
トラブルシューティングガイドをご確認ください。
内部的にはどのように動作しますか?
Socket.IO の接続は、さまざまな低レベルトランスポートで確立できます。
- HTTP ロングポーリング
- WebSocket
- WebTransport
Socket.IO は、次の要素に応じて、最適なオプションを自動的に選択します。
- ブラウザの機能 (こちら とこちらを参照)
- ネットワーク (一部のネットワークでは、WebSocket や WebTransport の接続がブロックされます)
詳細については、「仕組み」セクションをご覧ください。
プレーンな WebSocket に対して Socket.IO が提供する機能は何ですか?
WebSocket は素晴らしいものです!本当に。クライアントとサーバー間でデータを転送するための効率的な方法を提供します。利点としては
- サーバーからデータをフェッチするために、定期的なポーリングに依存する必要はありません
- サーバーにデータを送信するときに、すべての HTTP ヘッダーを繰り返し送信する必要はありません
ゲーム、チャット、コラボレーションソリューションなどの低レイテンシーでデータ集約型のアプリケーションに最適です。
とはいえ、WebSocket はかなり低レベルであり、WebSocket を使用したリアルタイムアプリケーションの開発には、多くの場合、追加のレイヤーが必要です。
- WebSocket 接続を確立できない場合は、HTTP ロングポーリングにフォールバックする
- WebSocket 接続が閉じられた場合に、自動的に再接続する
- 確認応答。データを送信して、相手側からの応答を期待する
- 接続されたすべてのクライアントまたは一部のクライアントにブロードキャストする
- サーバーの複数のインスタンスにスケールアップする
- 短時間の切断に対する接続回復
お察しのとおり、この追加レイヤーは Socket.IO ライブラリによって実装されています。
WebTransport とは何ですか?
簡単に言うと、WebTransport は WebSocket の代替となるものであり、ヘッドオブラインブロッキングのような WebSocket を悩ませるいくつかのパフォーマンス問題を修正します。
この新しい Web API (2022 年 1 月に Chrome に、2023 年 6 月に Firefox に含まれた) に関する詳細が必要な場合は、次のリンクを確認してください
- https://w3c.github.io/webtransport/
- https://developer.mozilla.org/en-US/docs/Web/API/WebTransport
- https://developer.chrome.com/articles/webtransport/
WebTransport のサポートは、セキュアなコンテキスト (HTTPS) が必要なため、Socket.IO ではデフォルトで有効になっていません。WebTransport を試したい場合は、専用のチュートリアルを確認してください。
Socket.IO はメッセージを保存しますか?
Socket.IO サーバーはメッセージを保存しません。
現在接続されていないクライアントのために、これらのメッセージをどこかに永続化するのはアプリケーションの責任です。
とはいえ、接続状態の復旧機能を有効にした場合、Socket.IO は短い期間メッセージを保存します。
Socket.IO の配信保証は何ですか?
Socket.IO は、どの低レベルトランスポートが使用されているか (2 つのトランスポート間の切り替え時でも) に関係なく、メッセージの順序を保証します。
さらに、デフォルトでは、Socket.IO は最大 1 回の配信保証 (「送信して忘れる」とも呼ばれます) を提供します。これは、特定の状況下ではメッセージが失われる可能性があり、再試行は試みられないことを意味します。
詳細についてはこちらをご覧ください。
特定のユーザーを識別するにはどうすればよいですか?
Socket.IO には、ユーザーの概念はありません。
特定の Socket.IO 接続をユーザーアカウントにリンクするのはアプリケーションの責任です。
Node.js アプリケーションの場合、たとえば次のようにできます
- Passportによって提供されるユーザーコンテキストを再利用する ( このチュートリアルを確認してください)
- または、クライアント側の
auth
オプションを使用してユーザー資格情報を送信し、ミドルウェアで検証する
変更履歴はどこにありますか?
こちらをご覧ください。