• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xhwdy26
V2EX  ›  程序员

手机 APP 怎么做到动态切换域名?

  •  
  •   xhwdy26 · Feb 1, 2025 · 4539 views
    This topic created in 487 days ago, the information mentioned may be changed or developed.

    在手机 APP 初始化配置了域名 A 和域名 B ,如果域名 A 访问慢,切换到域名 B 访问,我们是根据 ping 值,或者无法访问作为一个判断的依据。

    这样有没有问题,请教诸位大神,或者有更好的思路不吝赐教。

    20 replies    2025-02-03 02:44:57 +08:00
    Solix
        1
    Solix  
       Feb 1, 2025 via iPhone
    500 就切换,以防万一逻辑可以做在客户端,再另外配置域名拉域名名单,每个域名再配置拉最新名单
    eas
        2
    eas  
       Feb 1, 2025
    这个不是应该在 dns 负载那头动脑筋嘛?
    tunggt
        3
    tunggt  
       Feb 1, 2025 via Android
    就像楼上说的 dns 负载均衡,或者你分区域分运营商解析。
    要么直接用 cdn 。
    不过你这访问响应,能根据用户的 ping 值?
    R4rvZ6agNVWr56V0
        4
    R4rvZ6agNVWr56V0  
       Feb 1, 2025
    直接用腾讯云 DNS 解析,付费就能开通 IGTM 做故障监测自动切换,不需要理解高深的 HA 架构、不需要改动代码解决。
    GG668v26Fd55CP5W
        5
    GG668v26Fd55CP5W  
       Feb 1, 2025 via iPhone
    这个有点类似翻墙软件的负载均衡,选择最快的节点,可以定时检测,使用一条 URL 检查响应时间
    hefish
        6
    hefish  
       Feb 1, 2025
    根据 ping 值切换是不是有些草率了?
    codegenerator
        7
    codegenerator  
       Feb 1, 2025 via Android
    可以用一个简单接口代替 ping ,其他都没有问题
    xhwdy26
        8
    xhwdy26  
    OP
       Feb 1, 2025
    各位,关键问题是 A 域名是天朝,B 域名是某国,这些都无效,这些 DNS 可能无法用上
    tunggt
        9
    tunggt  
       Feb 1, 2025 via Android
    @xhwdy26 你服务器 ip 和域名无关。
    你分区域解析,不就行了。
    难道你以为同一服务器,绑定不同国别域名,访问速度就会不一样?
    ETiV
        10
    ETiV  
       Feb 1, 2025 via iPhone
    如果你是个正经的 app ,就不要在国内上架能访问海外的,反之亦然
    hzplszl
        11
    hzplszl  
       Feb 1, 2025
    搞个小文件放到两个域名,客户端在网络切换或者其他有必要的场景下,去下载文件竞速,选择更快的域名
    yinmin
        12
    yinmin  
       Feb 1, 2025 via iPhone   ❤️ 1
    正统的做法是用一个域名做智能 dns ,国内用户返回国内 ip ,国外用户返回国外 ip 。

    如果你要做竞速,建议别用 ping ,直接用 tcp/https 发起第一个请求,看哪个请求先有回复就用哪个。因为有些网络环境(例如 fakeip )是没法 ping 的。
    chi1st
        13
    chi1st  
       Feb 1, 2025
    楼上正解,智能 DNS
    yinmin
        14
    yinmin  
       Feb 1, 2025 via iPhone   ❤️ 1
    接#12 为什么不要用 ping ,因为有些网络环境,例如 fakeip 环境解析出的 ip 地址是假 ip (常见 198.18.x.x ),ping 是毫无意义的,另外某些网络防火墙可能会屏蔽 icmp 或者 tcp 包,出现 ping 不通但 tcp 通 或者 ping 通但是 tcp 不通的情况。

    如果你需要多服务器竞速,可以专门做一个 api 接口简单返回“OK”数据包,在 app 启动/网络切换/连接出错时,同时对多个服务器发起这个 api 请求,看哪个先返回就优先哪个。
    jinliming2
        15
    jinliming2  
       Feb 1, 2025
    用户的网络情况可能是很复杂的,即便是在没有防火墙的国家,也可能会遇到比如连接了需要登录的 Wi-Fi 之类的情况,所有域名解析都会被拦截并跳转到 Wi-Fi 登录页面,所以 ping 、tcp ping 、普通 http 请求都是不可靠的。

    所以 #12/#14 正解,但是服务器竞速比较常用的方法是提供一个 http 的 /generate_204 接口(/generate_204 属于事实上的标准,虽然没有定义标准,但大部分网站选择遵守),这个接口没有任何逻辑,仅返回 HTTP 状态码 204 ,且没有 body 。业务需要判断接口返回的状态码是 204 而非其他。
    在 /generate_204 正常返回之前,都属于网络未连接的状态,应当以一定时间间隔(通常时间间隔越来越大)重试,直到最先返回的就是最快的。后续定期检查更新网络状态。
    xhwdy26
        16
    xhwdy26  
    OP
       Feb 2, 2025
    谢谢各位 V 友的解答,各位新年快乐!
    sujin190
        17
    sujin190  
       Feb 2, 2025 via Android
    @xhwdy26 而且手机似乎会在网络变化 dns 服务器变更的时候 dns 记录自动失效,已经建立的连接也会断开,这样分区解析会自动更新,毕竟手机是移动的
    jim9606
        18
    jim9606  
       Feb 2, 2025
    一般来说,负载均衡是优先在服务器侧做的,对外入口是负载均衡网关,网关做健康监测和转发。
    在此之上客户端做的是 fallback ,这个一般用连接超时和响应异常,不推荐用 ping ( icmp echo ),而且很多环境只管 tcp udp 能不能通的。
    jeesk
        19
    jeesk  
       Feb 3, 2025 via Android
    参考 bilibili 请求一个接口,返回这个地域可用的 api ip 即可。。

    bilibili 很多接口都没 https 直接抓包能看到不少东西
    jeesk
        20
    jeesk  
       Feb 3, 2025 via Android
    {
    "dns":[
    {
    "host":"app.bilibili.com",
    "client_ip":"58.19.1.96",
    "ips":[
    "221.15.71.67",
    "221.15.71.66",
    "221.15.71.65",
    "61.240.206.10",
    "221.15.71.64",
    "61.240.206.13",
    "112.83.140.13",
    "112.83.140.12",
    "61.240.206.11",
    "61.240.206.12",
    "112.83.140.11",
    "112.83.140.14"
    ],
    "type":1,
    "ttl":52,
    "origin_ttl":90
    }
    ]


    这是 bilibili 请求

    http://203.107.1.34:80/191607/resolve?host=app.bilibili.com&query=4

    你说他是怎么做的?。特殊地区返回特殊 ip
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2747 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 15:41 · PVG 23:41 · LAX 08:41 · JFK 11:41
    ♥ Do have faith in what you're doing.