ターンベースのゲームサーバーのWebSocketとロングポーリングの違い


89

iOSゲーム用のサーバーを書いています。ゲームはターンベースであり、サーバーがクライアントに情報をプッシュする必要があるのは、対戦相手の動きを通知することだけです。

WebSocketの使用と長時間のポーリングのパフォーマンスと実装の容易さの違いについて誰かがコメントできるかどうか興味があります。また、WebSocketを使用した場合、それを使用して情報を受信し、他のすべてのPOSTリクエストを送信するだけですか、それともすべての通信をWebSocket経由で行う必要がありますか?

さらに、Webクライアントの作成にも興味がある場合、WebSocketとロングポーリングの間に考慮すべき追加事項はありますか?


6
プッシュ通知を使用して、クライアントに新しいデータを通知することもできます。私は、あなたの2つの解決策が考えているよりも、(バッテリーに関して)より効率的であると信じています。
pteofil 2015

1
ユーザーがまだアプリを使用している場合、それはどのように機能しますか?
酸性

4
プッシュ通知を受信すると、アプリでも通知されます。
pteofil 2015

回答:


177

ロングポーリングとは何ですか?

ここに画像の説明を入力してください 従来のポーリング手法のバリエーションであり、サーバーからクライアントへの情報プッシュのエミュレーションを可能にします。長いポーリングでは、クライアントは通常のポーリングと同様の方法でサーバーに情報を要求します。

  • サーバーにクライアントが利用できる情報がない場合、空の応答を送信する代わりに、サーバーは要求を保持し、いくつかの情報が利用可能になるのを待ちます。
  • 情報が利用可能になると(または適切なタイムアウトの後)、完全な応答がクライアントに送信されます。クライアントは通常、すぐにサーバーに情報を再要求するため、サーバーにはほとんどの場合、イベントに応答してデータを配信するために使用できる待機中の要求があります。

    Web / AJAXのコンテキストでは、ロングポーリングはCometプログラミングとも呼ばれます。

Websocketはどうですか?

ここに画像の説明を入力してください WebSocketは、クライアントとサーバー間の永続的な接続を提供します。この接続を使用して、いつでもデータの送信を開始できます。

  • クライアントは、WebSocketハンドシェイクと呼ばれるプロセスを介してWebSocket接続を確立します。このプロセスは、クライアントが通常のHTTPリクエストをサーバーに送信することから始まります。
  • このリクエストには、クライアントがWebSocket接続の確立を希望していることをサーバーに通知するUpgradeヘッダーが含まれています。

結論

リアルタイム通信が必要な場合は、WebSocketを選択できます。

しかし、ロングポーリングでは:

サーバーが新しい情報を取得したときにそれをクライアントにプッシュできるように、WebクライアントとWebサーバーの間の接続は開いたままになります。その後、その要求は終了します。次に、クライアントとサーバーの間で新しい要求が行われ、サーバーからの別の更新を待ちます。HTTP / 1.1のキープアライブにより、通常、同じTCP接続が複数の要求を通じて永続的に開かれます。

参考資料およびその他の考慮事項:

PubNubロングポーリングvsソケット-モバイルバッテリー寿命

Long-Polling、Websocket、Server-Sent Events(SSE)、Cometとは何ですか?

Objective-Cでのロングポーリング

Websocketの紹介

Websocketとロングポーリング

アプリでのWebSocketの使用

Websocketアプリケーション

PushTechnology-ロングポーリング

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.