手机 APP 怎么做到动态切换域名?
在手机 APP 初始化配置了域名 A 和域名 B ,如果域名 A 访问慢,切换到域名 B 访问,我们是根据 ping 值,或者无法访问作为一个判断的依据。
这样有没有问题,请教诸位大神,或者有更好的思路不吝赐教。
500 就切换,以防万一逻辑可以做在客户端,再另外配置域名拉域名名单,每个域名再配置拉最新名单
这个不是应该在 dns 负载那头动脑筋嘛?
就像楼上说的 dns 负载均衡,或者你分区域分运营商解析。
要么直接用 cdn 。
不过你这访问响应,能根据用户的 ping 值?
直接用腾讯云 DNS 解析,付费就能开通 IGTM 做故障监测自动切换,不需要理解高深的 HA 架构、不需要改动代码解决。
这个有点类似翻墙软件的负载均衡,选择最快的节点,可以定时检测,使用一条 URL 检查响应时间
根据 ping 值切换是不是有些草率了?
可以用一个简单接口代替 ping ,其他都没有问题
各位,关键问题是 A 域名是天朝,B 域名是某国,这些都无效,这些 DNS 可能无法用上
你服务器 ip 和域名无关。
你分区域解析,不就行了。
难道你以为同一服务器,绑定不同国别域名,访问速度就会不一样?
如果你是个正经的 app ,就不要在国内上架能访问海外的,反之亦然
搞个小文件放到两个域名,客户端在网络切换或者其他有必要的场景下,去下载文件竞速,选择更快的域名
正统的做法是用一个域名做智能 dns ,国内用户返回国内 ip ,国外用户返回国外 ip 。
如果你要做竞速,建议别用 ping ,直接用 tcp/https 发起第一个请求,看哪个请求先有回复就用哪个。因为有些网络环境(例如 fakeip )是没法 ping 的。
楼上正解,智能 DNS
接#12 为什么不要用 ping ,因为有些网络环境,例如 fakeip 环境解析出的 ip 地址是假 ip (常见 198.18.x.x ),ping 是毫无意义的,另外某些网络防火墙可能会屏蔽 icmp 或者 tcp 包,出现 ping 不通但 tcp 通 或者 ping 通但是 tcp 不通的情况。
如果你需要多服务器竞速,可以专门做一个 api 接口简单返回“OK”数据包,在 app 启动/网络切换/连接出错时,同时对多个服务器发起这个 api 请求,看哪个先返回就优先哪个。
用户的网络情况可能是很复杂的,即便是在没有防火墙的国家,也可能会遇到比如连接了需要登录的 Wi-Fi 之类的情况,所有域名解析都会被拦截并跳转到 Wi-Fi 登录页面,所以 ping 、tcp ping 、普通 http 请求都是不可靠的。
所以 #12/#14 正解,但是服务器竞速比较常用的方法是提供一个 http 的 /generate_204 接口(/generate_204 属于事实上的标准,虽然没有定义标准,但大部分网站选择遵守),这个接口没有任何逻辑,仅返回 HTTP 状态码 204 ,且没有 body 。业务需要判断接口返回的状态码是 204 而非其他。
在 /generate_204 正常返回之前,都属于网络未连接的状态,应当以一定时间间隔(通常时间间隔越来越大)重试,直到最先返回的就是最快的。后续定期检查更新网络状态。
谢谢各位 V 友的解答,各位新年快乐!
而且手机似乎会在网络变化 dns 服务器变更的时候 dns 记录自动失效,已经建立的连接也会断开,这样分区解析会自动更新,毕竟手机是移动的
一般来说,负载均衡是优先在服务器侧做的,对外入口是负载均衡网关,网关做健康监测和转发。
在此之上客户端做的是 fallback ,这个一般用连接超时和响应异常,不推荐用 ping ( icmp echo ),而且很多环境只管 tcp udp 能不能通的。
参考 bilibili 请求一个接口,返回这个地域可用的 api ip 即可。。
bilibili 很多接口都没 https 直接抓包能看到不少东西
{
"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 请求
203.107.1.34:80/191607/resolve?host=app.bilibili.com&query=4
你说他是怎么做的?。特殊地区返回特殊 ip
这个项目的详细配置文档需要做一个“人机检测”,就是扫码关注微信公众号收验证码。 像这篇 docs.tangly1024[.]com/article/notion-next-t…
用 winscp 传输太慢了 可以用 php -S 弄个临时服务器 但我知道这个 php 不支持并发请求 所以无法多线程下载 其他语言有什么临时 http 服务器支持多线程下载…
不是说这游戏无聊,是太好玩,而且需要保持专注,但又处在重复场景之中,很容易疲劳;结果上周六周天,11 点就抗不住了,倒头就睡着;要知道我平时周末玩 fifa 或 2k 一般是晚…