需求: 在 APP 首次安装时,调用服务端接口,上报设备 IP ( IPv4 、IPv6 )
方案一:通过 web 服务解析请求头里的 ip ; 缺点:运维反馈路由配置要么 IPv4 优先要么 IPv6 优先,只能获取到单一的 IP
方案二:客户端获取设备 IP 上报 缺点:只能获取到子网 IP
方案三:通过分别接口调用,获取 IPv4 或 IPv6 后同时上报; 缺点:结合方案一、至少需要依赖额外的一次网络请求
由于 APP 启动必须等到接口调用成功后才能继续业务操作,方案三会增加启动耗时,严重影响用户体验。
https://ipw.cn/ 这种第三方工具网站是怎么实现的
1
llmice 206 天前
做异步不行吗?
|
2
wy315700 206 天前
|
3
kenvix 206 天前
优化接口,并发同时请求 ipv4-only 和 ipv6-only 的 API
|
4
liyafe1997 206 天前
整俩域名,分别 v4 和 v6 only (只有 AA 或 AAAA 记录)
|
5
zhyf007 OP @llmice
@wy315700 @kenvix @liyafe1997 目前看来,也就只能异步请求两个接口。 业务要求比较严格。由于服务器都部署在单一地区,全国各地不同的网络环境网络通信耗时各有不同。每增加一个接口请求,就增加业务阻塞的风险 |
6
Yanlongli 205 天前
最好的是方案三
折中是 ipv4 通过请求获取,ipv6 通过网卡获取(排除私网的 ipv6 后,一般 ipv6 都是公网 IP ,经过 nat 的 ipv6 比较少) |
7
esee 205 天前
同时获取到 v4 和 v6 肯定得两次请求,这是网络应用层决定的,你获取设备的 IP 然后上报也不一定准。另外不懂你为啥会觉得增加启动耗时,放异步执行又不影响,还是应用需要上报 ip 成功后才允许使用。
|
9
cnbatch 205 天前
能不能这样:
先获取 IP 地址,不管是 v4 还是 v6 ,上报了再说。 启动后,运行 1 个异步任务,已经获取到 v4 地址就尝试访问 v6 接口,已经获取到 v6 地址那就尝试访问 v4 接口。 如果另一个地址能够获取成功,该存数据库就存数据库,该写日志就写日志。 |