アプリの最初の起動時に、〜 50 MB のファイルをダウンロードして解凍します。
世界中のユーザーがいて、ファイルをホストできる 3 つの異なるサーバーがあるので、それらすべてを使用してコードで確認することを考えました。サーバーはユーザーに最速/最も近く、それを使用します..
どうすればそれを達成できますか?
アプリの最初の起動時に、〜 50 MB のファイルをダウンロードして解凍します。
世界中のユーザーがいて、ファイルをホストできる 3 つの異なるサーバーがあるので、それらすべてを使用してコードで確認することを考えました。サーバーはユーザーに最速/最も近く、それを使用します..
どうすればそれを達成できますか?
「拡張ファイル」の追加にGoogle Playサービスを利用してみませんか?ここを参照してください: http://developer.android.com/guide/google/play/expansion-files.html
個人的には試していませんが、間違いなく役立つはずです。
また、所有しているすべてのサーバーとの TCP 接続を確立して、その所要時間を追跡することもできます。次に、時間が最小のものを使用します。
または、サーバーの既知の可用性を含むファイルを各サーバーからデバイスにプルさせます。
私はこれまでにこれをやったことがないので、これは単なる推測ですが、どちらが近いかを知りたい場合は:
ユーザーの IP アドレスを取得する: コードからデバイスの IP アドレスを取得する方法は?
IP アドレスで逆引き DNS ルックアップを実行すると、次のようになります: c-24-131-5-42.hsd1.va.comcast.net
結果の文字列を見ると、私がバージニア州に住んでいることがわかります。国/州を使用して、サーバーに近い方を見つけて使用します。
これを自分で行うには; デバイスのおおよその位置を取得するには、デバイスの IP アドレスを使用して geo ip サービスにクエリを実行する必要があります。次に、ファイルを提供するのに最適なサーバーと比較します。これには独自の問題があります (プロキシ/VPN トンネルはその 1 つです)。
2 つ目は、サーバーに ping を実行することです。ここでの問題は、プロバイダーによって ping がブロックされる可能性があることです (特に、デバイスが Wi-Fi に接続されていない場合)。Wi-Fi 上にある場合でも、ping は外部アドレスに対してブロックされ、ネットワーク内でのみ許可される場合があります。この場合; ping は常に失敗します。
したがって、信頼できる方法は、コンテンツ配信ネットワークを使用することです。可能な限り最も近いサーバーから自動的にファイルを提供します。アプリケーションを変更したり、別のサーバーを管理したりする必要はありません。