手机 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
请教个问题,类似温度,湿度硬件对接的时候,数据通过 websocket 获取,这些数据每隔几十秒就会传一组过来,咋处理这些数据?直接存数据库吗,这样数据库压力也太大了,通过 m…
前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下。这个题是这样的: 题目:…
折腾了几天将流氓软件放到虚拟机中,结果微信再虚拟机中登录被限制功能,需要实名认证,又折腾了一波, 但是又想玩游戏,又在找摸出虚拟机特征的教程,折腾过去折腾过来发现还不如颠倒过来…