gpt4 book ai didi

ios - 仅在 iOS 13.1.3 (Alamofire) 中网络连接丢失

转载 作者:行者123 更新时间:2023-11-29 05:23:01 24 4
gpt4 key购买 nike

我的应用程序通过 Alamofire 连接到本地主机 API。我已经实现了 URL 方案,因此当我单击 iMessage 中的链接时,它会打开我的应用程序,并在 viewDidLoad() 中连接到 API。由于某种原因,我仅在 iOS 13.1.3 中收到以下错误,但它在 iOS 12.4 中运行顺利。我所有的测试都是在真实设备上进行的。

错误:

2019-10-21 10:32:13.059194+0530 TestAPI[882:164673] [] nw_read_request_report [C5] Receive failed with error "Software caused connection abort"
2019-10-21 10:32:13.060020+0530 TestAPI[882:164673] Task <45115A48-58C7-49EA-AB5D-2C6708E3C036>.<4> HTTP load failed, 363/0 bytes (error code: -1005 [4:-4])
2019-10-21 10:32:13.076737+0530 TestAPI[882:164603] Task <45115A48-58C7-49EA-AB5D-2C6708E3C036>.<4> finished with error [-1005] Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=-4, NSUnderlyingError=0x283d13840 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x2810a9a40 [0x1d42775e0]>{length = 16, capacity = 16, bytes = 0x100293ddc0a808680000000000000000}, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <45115A48-58C7-49EA-AB5D-2C6708E3C036>.<4>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <45115A48-58C7-49EA-AB5D-2C6708E3C036>.<4>"
), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=http://192.168.8.104:37853/auth/test, NSErrorFailingURLKey=http://192.168.8.104:37853/auth/test, _kCFStreamErrorDomainKey=4}
2019-10-21 10:32:13.590311+0530 TestAPI[882:164306] FBSDKLog: Missing [FBSDKAppEvents appID] for [FBSDKAppEvents publishInstall:]
Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=-4, NSUnderlyingError=0x283d13840 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x2810a9a40 [0x1d42775e0]>{length = 16, capacity = 16, bytes = 0x100293ddc0a808680000000000000000}, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <45115A48-58C7-49EA-AB5D-2C6708E3C036>.<4>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <45115A48-58C7-49EA-AB5D-2C6708E3C036>.<4>"
), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=http://192.168.8.104:37853/auth/test, NSErrorFailingURLKey=http://192.168.8.104:37853/auth/test, _kCFStreamErrorDomainKey=4}

这是代码:

override func viewDidLoad()
{
super.viewDidLoad()

txtLable.text = "test"
let testServices = TestService()

let test: Parameters = [
"test": "test"
]

testServices.TestNonSecureConnection(parameters: test, completionHandler: {(returnUserVerificationStatus) -> Void in
if(returnUserVerificationStatus != "failed")
{
self.txtLable.text = returnUserVerificationStatus
}else{
print("failed")
}
})
}


class TestService
{
func TestNonSecureConnection(parameters: Parameters, completionHandler: @escaping (_ returnUserVerificationStatus: String)-> Void )
{
var headers: HTTPHeaders = [:]
var resultString = ""

let url = URL(string: Config.LOGIN_SERVER_URL + "/auth/test")!
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"

do {
urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: [])
} catch {
// No-op
}

urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")

Alamofire.request(urlRequest)
.responseString() { response in
switch response.result {
case .success:
resultString = response.result.value!
completionHandler(resultString)
case .failure(let error):
print(error)
}
}
}

}


func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {

self.window = UIWindow(frame: UIScreen.main.bounds)
let storyBoard = UIStoryboard(name: "Main", bundle: nil)

self.scheme = url.scheme
self.path = url.path
self.query = url.query

let viewController = storyBoard.instantiateViewController(withIdentifier: "viewcontroller") as! ViewController
self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()
return true
}

最佳答案

本质上,底层 NSURLRequest 正在尝试重新使用已被服务器删除的 HTTP 连接。这显然是因为客户端库和服务器期望连接的生命周期不同而引起的。或者其他的东西。老实说,我不是 100% 确定原因,但下面的解决方案都表明这就是正在发生的事情。

有 3 种不同的方法可以解决这个问题:

  1. 在您的服务器上禁用 KeepAlive

    这将导致为每个新请求重新创建新连接。取决于您与服务器对话的模式
    这可能无关紧要……或者可能是性能问题。

  2. 将 KeepAlive 保持为开启状态,但将 KeepAliveTimeout 设置为超过 30 秒

    这是与#1 相反的权衡。它会更快,如果你击中服务器很多你可能会注意到它。然而,这将导致您的服务器建立连接并减少您可以支持的并发用户数量。任一选择对性能的影响在某种程度上取决于您正在运行的服务器以及您应该运行的服务器能够通过谷歌搜索“KeepAlive best”来决定实践”。

  3. 检测错误代码并立即重试相同的查询。

    当您收到此错误时 - 检查错误代码并立即重试同样的要求。如果错误是由于使用已失效的连接引起的,则新查询将自动创建一个新连接并且应该可以工作。如果网络真的消失了,那么你就会遇到更大的问题。

此错误可能来自其他来源,但我已经尝试了所有 3 种方法,每种方法都解决了问题(显然需要不同的权衡)。

引用:this post

关于ios - 仅在 iOS 13.1.3 (Alamofire) 中网络连接丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58480106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com