web-dev-qa-db-ja.com

WebSocketの欠点

WebSocketの使用にはどのような制限があるのか​​知りたいのですが。

WebSocketはまさに強力なものです。それが不利な点がないとは思えません。

たとえば、サーバーに同時に接続できるユーザーの数は何ですか(ゲームを作成していて、ユーザーがWebSocketを介してゲームに接続する場合、同時に接続できるユーザーの数を制限するのは何ですか?)

また、接続を追加するたびに、接続の品質(速度など)が低下するのは本当ですか?

41
Pacerier

もちろん、長所と短所は特定のユースケースによって異なりますが、WebSocketとHTTPの違いをいくつか指摘しておきましょう。

WebSocketはHTTPよりも複雑です。 TelnetクライアントとのHTTP接続を確立できますが、WSで同じことを行うことはおそらくできません。ハンドシェイク要件(SHA1ハッシュ関数の使用を含む)を無視した場合でも、送信されるデータを適切にマスクおよびフレーム化できず、サーバーが接続を閉じます。

Uweが言ったように、WebSocket接続はHTTP接続よりも永続的であるように意図されています。 30分ごとに更新を受信するだけの場合は、HTTPを使用することをお勧めします。 1秒ごとに更新を受信する場合は、HTTP接続の確立に時間がかかるため、WebSocketの方が適している場合があります。

HTTP接続を確立するには、まずTCP接続(SYN、SYN/ACK、ACK))を確立してから、かなり大きなヘッダーを含むGET要求を送信し、最後にサーバーの応答を受信する必要があります(別の大きなヘッダーとともに)。

オープンWebSocketを使用すると、単に応答を受信するだけで(要求は不要)、ヘッダーは非常に小さくなります。小さなフレームの場合は2バイト、途方もなく大きいフレーム(ギガバイトの範囲)の場合は最大10バイトです。

2つのプロトコルを決定するには、2つのコスト(接続を開いたままにすることと新しい接続を確立すること)を比較検討する必要があります。

注:この回答は、プロトコルの現在のドラフト(draft-ietf-hybi-thewebsocketprotocol-09)に基づいています。 WebSocketは急速に進化しており、多くの実装はまだ古いドラフトに基づいており、確定する前に一部の詳細が変更される可能性があります。

41
suriv

私が読んだことから、これは HTTPサーバープッシュ に関連しているようです。これは、サーバー上で多くの接続を作成するため、通常は使用することはお勧めしません。

選択する必要がある場合は、おそらくクライアントポーリングメカニズムを常に開発します。

1
Uwe Keim