2019独角兽企业重金招聘Python工程师标准>>>
今年6月以来很多苹果开发者的appstore审核都被ipv6网络问题而被拒绝上架。
网上已经有很多开发者分享了APP服务器域名添加ipv6解析的方案。
同样,笔者也受到了一些困扰,即使设置了ipv6解析,有的请求可以,而有的请求不行。这里我们通过网关的角度来分析其他的可能原因和解决方案。
从上图来看,如果我们的服务器支持了ipv4映射的话一般是没有什么问题。但是为什么会有的请求会失败呢?
这里就涉及使用的请求类的内部处理了,如果我们的APP里调用了一些函数,只能支持ipv4,可能就会出问题,比如一些底层C库实现的方法就没有那么智能,对ipv6和ipv4的协议分别做了支持,需要开发者自己区分调用,而系统内置的网络连接类通常会自动判断目前的网络环境是ipv4还是ipv6,然后采用相应的协议去发起报文请求,而你的服务器只需要支持ipv6解析即可。
所以,笔者的情况其实是在APP刚发请求的时候就已经失败了,实际情况是调用了底层C写的Socket类只支持ipv4,后来通过绑定Socket到ipv6之后解决。
所以对于这类问题,建议大家采用mac提供的ipv6 wifi热点来提前排查:
上图的测试方式二是我们传统的测试方式,测试方式一就是现在推荐使用的方式。
设置方式可以看此贴:http://blog.csdn.net/yuwuchaio/article/details/51459705
大家可以参考这个帖子对于Socket的处理:
http://compgroups.net/comp.os.linux.networking/binding-an-ipv6-address-to-an-af_ine/1823501