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

21 天前
 zhyf007

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

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

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

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

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

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

758 次点击
所在节点    程序员
10 条回复
llmice
21 天前
做异步不行吗?
wy315700
21 天前
https://ipw.cn/ 会分别请求
4.ipw.cn
6.ipw.cn
test.ipw.cn

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

目前看来,也就只能异步请求两个接口。
业务要求比较严格。由于服务器都部署在单一地区,全国各地不同的网络环境网络通信耗时各有不同。每增加一个接口请求,就增加业务阻塞的风险
Yanlongli
21 天前
最好的是方案三
折中是 ipv4 通过请求获取,ipv6 通过网卡获取(排除私网的 ipv6 后,一般 ipv6 都是公网 IP ,经过 nat 的 ipv6 比较少)
esee
21 天前
同时获取到 v4 和 v6 肯定得两次请求,这是网络应用层决定的,你获取设备的 IP 然后上报也不一定准。另外不懂你为啥会觉得增加启动耗时,放异步执行又不影响,还是应用需要上报 ip 成功后才允许使用。
zhyf007
21 天前
@esee 上报 IP 后,才允许使用。所以一次请求回增加启动耗时
cnbatch
20 天前
能不能这样:
先获取 IP 地址,不管是 v4 还是 v6 ,上报了再说。
启动后,运行 1 个异步任务,已经获取到 v4 地址就尝试访问 v6 接口,已经获取到 v6 地址那就尝试访问 v4 接口。
如果另一个地址能够获取成功,该存数据库就存数据库,该写日志就写日志。
esee
20 天前
@zhyf007 不会啊,怎么会增加耗时,V4 和 V6 上报可以同时进行的。统一等待结果就行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1047036

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX