iOS:网络请求间歇性变慢

时间:2019-08-18 04:40:04

标签: ios swift networking

我有一个iOS应用程序,该应用程序有两个带有大型响应对象的请求,并且当连接良好时,通常需要100-200毫秒才能完成。当平均连接速度时,这些请求似乎在大约20%的时间内挂断了,而我却花了30到60秒钟的时间。然后,我将重新启动该应用程序,并在几秒钟后再次尝试该请求,该请求将在预期的时间(100-200 ms)中完成

我已经测试了端点正在与其他客户端(cURL,Postman)查询的api,并且没有任何问题,所以我可以肯定这与我的前端配置有关。我正在使用Alamofire库来处理请求。

以下是其中一个请求的代码:

func login(_ params: [String: String], completion: @escaping (Response<UserResponseSuccess, UserResponseFail>) -> Void) {
        Alamofire.request(self.url!, method: .post, parameters: params).responseJSON {
            response in
            if response.result.isSuccess {
                let respJSON: JSON = JSON(response.result.value!)
                if response.response?.statusCode == 200 {
                    // do stuff with json
                    let resp = UserResponseSuccess()
                    completion(Response.success(resp))
                } else {
                    logRequestError()
                    let resp = UserResponseFail()
                    completion(Response.failure(resp))
                }
            } else {
                logServerError()
                let resp = UserResponseFail()
                completion(Response.failure(resp))
            }
        }
    }

这是请求日志:

2019-08-17 14:03:16.832462-0600 Debug - foo[17418:3273774] CredStore - performQuery - Error copying matching creds.  Error=-25300, query={
    class = inet;
    "m_Limit" = "m_LimitAll";
    ptcl = htps;
    "r_Attributes" = 1;
    sdmn = "foo.bar.com";
    srvr = "foo.bar.com";
    sync = syna;
}
$ curl -v \
    -X POST \
    -H "User-Agent: Debug - foo/1.3 (com.foo.bar.debug; build:4; iOS 12.4.0) Alamofire/4.7.3" \
    -H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" \
    -H "Accept-Language: en-US;q=1.0" \
    -H "Accept-Encoding: gzip;q=1.0, compress;q=0.5" \
    -d "email=foo@foo.com&password=bar123" \
    "https://rtj.foo.com/users/login"

请求要么立即通过,要么不打入服务器。我可能会出现这些超时,然后重试请求,但我不想掩盖可能的错误。

与wifi相比,这似乎在蜂窝网络上更常发生。

更新:我使用URLSession而不是Alamofire运行了相同的查询,并且收到了相似的结果。查询的错误输出是:

error: 
Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." 
UserInfo={NSUnderlyingError=0x28228fe10 {Error 
Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo= . 
{_kCFStreamErrorCodeKey=60, _kCFStreamErrorDomainKey=1}}, 
NSErrorFailingURLStringKey=https://foo.bar.com/users/login, 
NSErrorFailingURLKey=https://foo.bar.com/users/login, 
_kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=60, 
NSLocalizedDescription=The request timed out.}

版本:Alamofire:4.7.3,Xcode版本:10.3,Swift版本:5

0 个答案:

没有答案