V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zhyf007
5.17D
V2EX  ›  程序员

如何在 APP 内同时获取 IPv4 和 IPv6

  •  
  •   zhyf007 · Jun 5, 2024 · 1686 views
    This topic created in 696 days ago, the information mentioned may be changed or developed.

    需求: 在 APP 首次安装时,调用服务端接口,上报设备 IP ( IPv4 、IPv6 )

    方案一:通过 web 服务解析请求头里的 ip ; 缺点:运维反馈路由配置要么 IPv4 优先要么 IPv6 优先,只能获取到单一的 IP

    方案二:客户端获取设备 IP 上报 缺点:只能获取到子网 IP

    方案三:通过分别接口调用,获取 IPv4 或 IPv6 后同时上报; 缺点:结合方案一、至少需要依赖额外的一次网络请求

    由于 APP 启动必须等到接口调用成功后才能继续业务操作,方案三会增加启动耗时,严重影响用户体验。

    https://ipw.cn/ 这种第三方工具网站是怎么实现的

    10 replies    2024-06-06 15:49:07 +08:00
    llmice
        1
    llmice  
       Jun 5, 2024
    做异步不行吗?
    wy315700
        2
    wy315700  
       Jun 5, 2024
    https://ipw.cn/ 会分别请求
    4.ipw.cn
    6.ipw.cn
    test.ipw.cn

    分别获取 V4 和 V6 地址以及判断哪个优先
    kenvix
        3
    kenvix  
       Jun 5, 2024
    优化接口,并发同时请求 ipv4-only 和 ipv6-only 的 API
    liyafe1997
        4
    liyafe1997  
       Jun 5, 2024
    整俩域名,分别 v4 和 v6 only (只有 AA 或 AAAA 记录)
    zhyf007
        5
    zhyf007  
    OP
       Jun 5, 2024
    @llmice
    @wy315700
    @kenvix
    @liyafe1997

    目前看来,也就只能异步请求两个接口。
    业务要求比较严格。由于服务器都部署在单一地区,全国各地不同的网络环境网络通信耗时各有不同。每增加一个接口请求,就增加业务阻塞的风险
    Yanlongli
        6
    Yanlongli  
       Jun 5, 2024
    最好的是方案三
    折中是 ipv4 通过请求获取,ipv6 通过网卡获取(排除私网的 ipv6 后,一般 ipv6 都是公网 IP ,经过 nat 的 ipv6 比较少)
    esee
        7
    esee  
       Jun 5, 2024
    同时获取到 v4 和 v6 肯定得两次请求,这是网络应用层决定的,你获取设备的 IP 然后上报也不一定准。另外不懂你为啥会觉得增加启动耗时,放异步执行又不影响,还是应用需要上报 ip 成功后才允许使用。
    zhyf007
        8
    zhyf007  
    OP
       Jun 5, 2024
    @esee 上报 IP 后,才允许使用。所以一次请求回增加启动耗时
    cnbatch
        9
    cnbatch  
       Jun 6, 2024
    能不能这样:
    先获取 IP 地址,不管是 v4 还是 v6 ,上报了再说。
    启动后,运行 1 个异步任务,已经获取到 v4 地址就尝试访问 v6 接口,已经获取到 v6 地址那就尝试访问 v4 接口。
    如果另一个地址能够获取成功,该存数据库就存数据库,该写日志就写日志。
    esee
        10
    esee  
       Jun 6, 2024
    @zhyf007 不会啊,怎么会增加耗时,V4 和 V6 上报可以同时进行的。统一等待结果就行。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2455 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 11:41 · PVG 19:41 · LAX 04:41 · JFK 07:41
    ♥ Do have faith in what you're doing.