在Android中花费大量时间(5秒)对自定义网址进行DNS查找

时间:2019-06-27 13:36:44

标签: android dns amazon-route53

我有一个在Godaddy中注册的域,但我在第53条路由中有DNS服务器。

当我尝试通过我的android应用程序ping网站时,DNS解析在第一时间(每10分钟一次)需要5秒。对于iOS或Mac浏览器,当我尝试从邮递员访问网址时,情况并非如此。这仅在我的android应用中发生。

尝试的解决方案:

1)在其他手机上尝试过

2)尝试了不同的网络。

所花时间的轨迹:     请求1(新连接)

0.000 callStart

0.007 dnsStart

5.048 dnsEnd

5.049 connectStart

5.056 secureConnectStart

5.106 secureConnectEnd

5.108 connectEnd

5.109 connectionAcquired

5.110 requestHeadersStart

5.112 requestHeadersEnd

5.196 responseHeadersEnd

5.197 responseBodyStart

REQUEST 1 (new connection) end success

如果您能在这里帮助我,那将是很大的帮助。

编辑:添加代码

String url = "https://customurl/";
OkHttpClient httpClient = new OkHttpClient.Builder()
            .eventListener(new PrintingEventListener())
            .dns(DnsSelector.byName("ipv6"))
            .build();
Retrofit client = new Retrofit.Builder().baseUrl(url).client(httpClient)
            .build();
System.out.println("Scanning REQUEST 1 (new connection) url: " + url);

TestInterface testInterface = client.create(TestInterface.class);

Call<ResponseBody> testCall = testInterface.testCall();
Log.i( TAG, "Scanning apiCall Start");
testCall.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            Log.i( TAG, "Scanning apiCall end success");
}

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Log.i( TAG, "Scanning apiCall end failed");
        }});

在Android模拟器中非常快 0.000个通话开始

0.010 dnsStart

0.095 dnsEnd

0.096 connectStart

0.103 secureConnectStart

0.537 secureConnectEnd

0.563 connectEnd

获得0.565连接

0.567 requestHeadersStart

0.572 requestHeadersEnd

0.573 responseHeadersStart

0.733 responseHeadersEnd

0.739 responseBodyEnd

0.740连接已释放

0.740 callEnd

1 个答案:

答案 0 :(得分:0)

我能够找到一种解决方法。在发布之前,我曾尝试过此解决方案,但由于某种原因,该解决方案当时不起作用。

我添加了here所述的公共DNS解析器

这使dns查找间隔从5.5秒降低到300 ms。尽管从我的角度来看,这仍然很高,但是要好得多。