WebSocketsは間違いなく未来です。
ロングポーリングは、AJAXのようにリクエストごとに接続を作成しないようにするためのダーティな回避策ですが、ロングポーリングはWebSocketが存在しないときに作成されていました。WebSocketsにより、長いポーリングはなくなります。
WebRTCは、ピアツーピア通信を可能にします。
WebSocketを学ぶことをお勧めします。
比較:
ウェブ上のさまざまなコミュニケーション技術の
AJAX - request
→ response
。サーバーへの接続を作成し、オプションのデータを含む要求ヘッダーを送信し、サーバーから応答を取得して、接続を閉じます。
すべての主要なブラウザでサポートされています。
ロングポーリング - request
→ wait
→ response
。AJAXと同様にサーバーへの接続を作成しますが、キープアライブ接続をしばらくの間(ただし長くはありません)開いたままにします。接続中、開いているクライアントはサーバーからデータを受信できます。タイムアウトまたはデータのeofのため、接続が閉じられた後、クライアントは定期的に再接続する必要があります。サーバー側では、AJAXと同じように、HTTPリクエストのように扱われますが、リクエストに対する応答は、アプリケーションロジックによって定義され、現在または将来のある時点で発生します。
サポートチャート(フル) | ウィキペディア
WebSockets - client
↔ server
。サーバーへのTCP接続を作成し、必要に応じて開いたままにします。サーバーまたはクライアントは、接続を簡単に閉じることができます。クライアントは、HTTP互換のハンドシェイクプロセスを実行します。成功すると、サーバーとクライアントはいつでも双方向でデータを交換できます。アプリケーションが両方の方法で頻繁なデータ交換を必要とする場合は効率的です。WebSocketには、クライアントからサーバーに送信される各メッセージのマスキングを含むデータフレーミングがあるため、データは単純に暗号化されます。
サポートチャート(とても良い) | ウィキペディア
WebRTC - peer
↔ peer
。クライアント間の通信を確立するためのトランスポートであり、トランスポートに依存しないため、UDP、TCP、またはさらに抽象的なレイヤーを使用できます。これは一般に、ビデオ/オーディオストリーミングなどの大量のデータ転送に使用されます。この場合、信頼性は二次的であり、応答時間と少なくとも一部のデータ転送のために、数フレームまたは品質の低下を犠牲にすることができます。両側(ピア)は、互いに独立してデータをプッシュできます。集中型サーバーから完全に独立して使用できますが、エンドポイントデータを交換する方法が依然として必要です。ほとんどの場合、開発者は集中型サーバーを使用してピアを「リンク」します。これは、接続を確立するための重要なデータを交換するためにのみ必要であり、その後は集中サーバーは必要ありません。
サポートチャート(中) | ウィキペディア
サーバー送信イベント - client
← server
。クライアントはサーバーへの永続的かつ長期的な接続を確立します。サーバーのみがクライアントにデータを送信できます。クライアントがデータをサーバーに送信したい場合は、別のテクノロジー/プロトコルを使用して送信する必要があります。このプロトコルはHTTP互換で、ほとんどのサーバー側プラットフォームに実装するのが簡単です。これは、ロングポーリングの代わりに使用するのに適したプロトコルです。サポートチャート(IEを除く) | ウィキペディア
利点:
WebSocketsサーバー側の主な利点は、それが(ハンドシェイク後の)HTTPリクエストではなく、適切なメッセージベースの通信プロトコルであることです。これにより、パフォーマンスとアーキテクチャの大きな利点を実現できます。たとえば、node.jsでは、異なるソケット接続で同じメモリを共有できるため、それぞれが共有変数にアクセスできます。したがって、データベースを中間の交換ポイントとして使用する必要はありません(AJAXやPHPなどの言語でのロングポーリングなど)。RAMにデータを保存したり、ソケット間ですぐに再発行したりできます。
セキュリティに関する考慮事項
人々はしばしばWebSocketのセキュリティについて心配しています。実際には、それはほとんど違いがないか、WebSocketをより優れたオプションにしています。まず、AJAXでは、各リクエストがインターネットインフラストラクチャを通過する新しいTCP接続であるため、MITMの可能性が高くなります。WebSocketsを使用すると、いったん接続されると、データをクライアントからサーバーにストリーミングするときにフレームマスキングが追加で適用されるだけでなく、その間にインターセプトすることもはるかに困難になります。最新のプロトコルはすべて、HTTPとHTTPS(暗号化)の両方をサポートしています。
PS
WebSocketは通常、ネットワーキングのためのロジックの非常に異なるアプローチを持っていることを覚えておいてください。これは、リアルタイムゲームがこれまでずっと持っていたもので、httpとは異なります。