web-dev-qa-db-ja.com

WebSocketsのエネルギー消費

モバイルデバイス(iPhone/Android)で、WebSocketとHTTPを実装することによるバッテリー消費への影響は何ですか?

インスタントメッセージングアプリを作成していて、2つのオプションがあるとします。

  1. プッシュ通知を利用して新しいメッセージをデバイスに通知し、REST APIを介してそのメッセージをフェッチします。
  2. ユーザーがアプリを起動したときにWebSocket接続を確立し、アプリがアクティブな間はその接続を維持します。サーバーは、プッシュ通知を使用するのではなく、すべてのメッセージをデバイスに直接転送します。

誰かが永続的なWebSocket接続を維持することは、各要求の後に電源を切るのではなく、アンテナを常にアクティブにする必要があるため、巨大なバッテリーを消費するだろうと私に言いました-しかし、それは本当に本当ですか?

これ 回答は、iOSでは各デバイスが常にプッシュ通知サービスとの永続的な接続を維持していることを示唆しているため(WebSocketsと同様)、デバイスのアンテナが実行されていることを示唆していません24とにかく/ 7?

HTTPリクエストの余分なオーバーヘッドは、インスタントメッセージングアプリにとっては取るに足らないものですが、多数のアイテムを絶えずダウンロードする必要があるアプリケーションでは、永続的なWebSocket接続が非常に役立ちます。モバイルデバイスでの長期的なWebSocket接続の維持に関する洞察(特にバッテリーの消費に関する情報)は非常に役立ちます。

37
Hundley

アイドル状態の純粋なWebSockets/TCPソケットソリューション(ピンポンパケットなし)は、データを送信しないため、接続の切断も検出しません。ハンドシェイクが発生すると、何かがソケットを閉じるか、送信者がデータを送信しようとするまで接続が確立されていると想定し、接続がないことが検出されます(この場合、ソケットは時々自動的に閉じられますが、カウントしませんその上)。

そのため、接続がアイドル状態の場合、WiFiは心配せずにスリープ状態に入ることができるため、電力消費を最小限に抑えることができます。ただし、いくつかの欠点があります。接続の損失は検出されないため、pingが失敗した場合は、再接続を試みてピンポンソリューションを実装する必要があります。 pingループはCPU使用率と電力消費に影響を与えますが、常に「オン」状態にあるWiFiよりもはるかに低くなります。もちろん、スリープモードではデータを受信できなくなります。

出典:自身のAndroidおよびWebSocketsの経験。

28
Paul