AF网络:处理负载平衡/服务器托管/重定向的问题很奇怪



所以,这个问题很难简单描述,我觉得在AFNetworking github中提出问题之前,我应该先问这里。故事是这样的:

// Definition for words in the story.
Characters:
- APP: Our iOS app, which POST requests to a URL's API (has user input from a UITextField)
APP's networking connection using framework AFNetworking 3.0
- DEV: Us developers, who created the iOS app.
- CUST: The troublesome customer, who live far from DEV.
CUST used app before, then one day it doesn't work anymore (S1 has died).
Server:
- S1: The CUST's primary server (died for some reasons). This has the IP address = ip1
- S2: The CUST's secondary server (works fine). This has the IP address = ip2
- URL: The domain URL point to both server (using load balancing or something like that, I dunno).
// End-of-definition

故事开始:

CUST使用应用程序,输入URL,连接失败。CUST在iPad浏览器中输入URL,正常访问。CUST要求DEV检查发生了什么。DEV在应用程序中输入URL,正常连接。当时,DEV不知道CUST有2个服务器。

CCD_ 11&DEV感到绝望,挣扎了好几次。CUST尝试了他能尝试的一切(使用https/http,添加/删除www,删除应用程序并重新安装)。DEV由于不合理的原因(连接器错误、api错误…)而分心。然后CUST记住他有两个服务器。CCD_ 19共享CCD_ 20以供CCD_ 21检查。这时DEV发现S1已经死亡,但S2还没有。

因此,DEV得到了CUST不能使用APP访问URL的原因:S1已经死亡然而,这是SO的真正问题:

为什么它对我们有效,但对CUST无效?为什么APP(在DEV的手中)去了S2,而在CUST的手中,它去了S1(并死亡)?但为什么CUST可以正常使用iPad浏览器访问URL

它和DNS有关系吗?VPN?负载平衡?我很想知道这个问题的原因。

感谢阅读。请随意编辑这个问题,因为我也很难尽可能简单地描述这个问题。

更新1:

James Jayson询问APP如何连接到URL时,它使用AFNetworking 3.0AFHTTPSessionManager,并进行一些设置:

self.sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseUrl sessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
self.sessionManager.securityPolicy.allowInvalidCertificates = YES;
self.sessionManager.securityPolicy.validatesDomainName = NO;
self.sessionManager.requestSerializer.timeoutInterval = timeout;
self.sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
// Call API:
[self.sessionManager POST:path parameters:dictParams progress:nil success:^(NSURLSessionTask *task, id responseObject) { 
// success block
} failure:^(NSURLSessionTask *task, NSError *error) {
// failure block
}

更新2:

所以,现在我有了新的东西:CUST使用iOS 9.3.5,DEV使用iOS 10.x。DEV尝试在iOS 9.3.5设备上调试,CUST的错误出现,错误消息是这样的(几乎相同,只是URL不同)。

日志:错误域=NSURLErrorDomain Code=-1004"无法连接到服务器。"UserInfo={NSErrorFailingURLStringKey=APIURL,_kCFStreamErrorCodeKey=-2200,NSErrorFailingURLKey=APIURL,NSLocalizedDescription=无法连接到服务器。,_kCFStreamErrorDomainKey=4,NSUnderlyingError=0x16146990{错误域=kCFErrorDomainCFNetwork代码=-1004"(null)"UserInfo={_kCFStreamErrorDomainKey=4,NSErrorPerAddressKey={length=16,capacity=16,bytes=0x100201bb253ce716000000000000000000000000},_kCFStreamErrorCodeKey=-2200}}

现在DEV正在努力解决如何处理此错误。请帮忙。

在不知道应用程序是什么以及它是如何工作的情况下,我猜它的状态已满,可能是由于当前死服务器上的会话处于活动状态,启动会话的开发人员会通过负载均衡器定向到服务器2。

最新更新