zoukankan      html  css  js  c++  java
  • android网络交互之DNS优化知识整理

    android网络交互之DNS优化知识整理

    之前的工作中,经常会遇到DNS解析出问题导致网络交互的操作无法正常进行。

    UnknownHostException

    在很多的移动开发过程中,与服务端的交互的url通常是包含域名的。而在实际的网络交互的过程中,第一步就需要对域名进行dns解析。

    复杂的网络环境里面,dns解析会耗费很长的时间、甚至是解析失败。这是经常会发生的。

    所以这一步的优化是非常至关重要的。

    有那么一种方案叫:IP直连

    就是在网络交互的过程中,跳过域名的DNS解析,直接用IP进行网络交互。可以避免这一大麻烦。

    针对这一方案,衍生出了httpdns,目前有下面几家出名的的:

    • DNSPod D+ 移动解析服务D+  免费
    • 阿里
    • 新浪

    它们的基本的实现方法是:

    1. 将域名发送给httpdns服务器,得到该域名的IP地址
    2. 将该IP地址替换掉域名,进行网络访问

    当然,这里面每一步都有很多的细节。

    其中需要重要的一点是:对于一个IP主机挂载多个Server的情况,在使用IP直连时,Host头需要设置域名

    代码如下:

        public static HttpURLConnection getHttpURLConnection(String urlString)
                throws IOException {
            URL url = new URL(urlString);
            String originHost = url.getHost();
            HttpURLConnection conn;
    
            String dstIp = httpdnsService.getIpByHost(url.getHost()); //这里得到了IP地址
            if (dstIp != null) {
                Log.d("HttpDNS Demo", "Get IP from HttpDNS, " + url.getHost() + ": " + dstIp);
                urlString = urlString.replaceFirst(url.getHost(), dstIp);
                url = new URL(urlString);
                conn = (HttpURLConnection) url.openConnection();
                // 设置HTTP请求头Host域
                conn.setRequestProperty("Host", originHost); // 这里是设置head中的host
                return conn;
            } else {
                Log.d("HttpDNS Demo", "Degrade to local DNS.");
                return (HttpURLConnection) url.openConnection();
            }
        }
    

      

    更多的内容和介绍,可以参考下面的文章:

  • 相关阅读:
    demo_14 更多卡片视图实现
    demo_13 基础卡片视图实现
    demo_10_06 云数据库聚合_lookup_02
    demo_10_06 云数据库聚合_lookup_01
    demo_12 子组件选项卡切换及事件传递
    demo_11 封装数据请求
    demo_10_05 云数据库聚合_limit
    demo_10_04 云数据库聚合_group_02
    sed 过滤和替换文本函数
    curl 参数
  • 原文地址:https://www.cnblogs.com/zhou-guobao/p/5401124.html
Copyright © 2011-2022 走看看