在第一个应用程序启动时,我下载了约 50 mb 的文件,然后解压缩它们。
我有来自世界各地的用户,我有 3 个不同的服务器可以托管文件,所以我想全部使用它们并通过代码检查哪个服务器是最快/最接近用户并使用它的..
我怎样才能做到这一点?
在第一个应用程序启动时,我下载了约 50 mb 的文件,然后解压缩它们。
我有来自世界各地的用户,我有 3 个不同的服务器可以托管文件,所以我想全部使用它们并通过代码检查哪个服务器是最快/最接近用户并使用它的..
我怎样才能做到这一点?
为什么不使用 Google Play 服务添加“扩展文件”?见这里:http: //developer.android.com/guide/google/play/expansion-files.html
我没有亲自尝试过,但它肯定会对你有所帮助。
也许向每个服务器发送一个简单的请求到一种ping.php
脚本,测量读取响应所花费的时间并选择最好的一个。不要忘记向虚拟服务器发送第一个请求或下载网页,以便手机激活网络并将其设置为可能的最佳性能(否则与下一个服务器相比,您的第一台服务器可能总是看起来很慢) .
我以前从未这样做过,所以这只是一个猜测,但如果你想知道哪个更接近:
获取用户的 IP 地址: 如何从代码中获取设备的 IP 地址?
对 IP 地址进行反向 DNS 查找,结果如下:c-24-131-5-42.hsd1.va.comcast.net
通过查看生成的字符串,您可以知道我住在 VA。使用国家/州来确定哪个更接近您的服务器并使用它。
自己做这个;您需要使用设备的 IP 地址查询地理 ip 服务以获取其大致位置;然后将其与哪个服务器最好地提供文件进行比较。这有其自身的问题(代理/vpn 隧道就是其中之一)。
其次是ping你的服务器。这里的问题可能是 ping 可能被提供商阻止(特别是如果设备在未连接 wifi 的情况下);即使他们在 wifi 上,ping 也可能会被外部地址阻止,并且只允许在网络内。在这种情况下; ping 总是会失败。
所以可靠的方法是使用Content Delivery Network。他们将负责自动从最近的服务器提供文件。您不必修改应用程序或管理不同的服务器。
您还可以尝试与您拥有的每台服务器建立 TCP 连接并跟踪执行此操作所花费的时间。然后使用时间最短的那个。
或者让设备从每个服务器中提取一个包含服务器已知可用性的文件。