我正在尝试将URLSession Timout Interval设置为5秒钟。网页是本地页面,因此应该在该时间内加载。如果网页未在5秒内加载,我想要弹出警报消息并告诉用户连接到网络。我的问题是,如何使用我已有的工作代码实现这一点?我试图使用一些不同的例子(一个被注释掉)但没有运气。任何帮助表示赞赏:)
func loadINFO(){
let urlString = "mytestPHP.php"
let url = URL(string: urlString)
//Try To Set Timout Interval...
//let urlconfig = URLSessionConfiguration.default
//urlconfig.timeoutIntervalForRequest = 5
//urlconfig.timeoutIntervalForResource = 5
//let session = URLSession(configuration: urlconfig)
URLSession.shared.dataTask(with:url!) { (data, response, error ) in
if error != nil {
//Alert User That They Are Not Connected To The Device
self.CreateAlert(title: "Error!", message: "Please Connect To Network and Try Again")
print(error as Any)
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as! [String:Any]
if let ssid = parsedData["SSID"] as? String,
let pass = parsedData["PASS"] as? String {
DispatchQueue.main.async {
// Update UI
self.SSID_INPUT.text = (ssid)
self.PASS_INPUT.text = (pass)
}
}
}
catch let error as NSError {
print(error)
}
}
}.resume()
}
仍然无法得到答案......如果有人有更好的解决方案,我全都听见了。
编辑:只是为了进一步澄清。 php web服务器正在我正在更改ssid和psk的设备上运行。因此,如果用户不在正确的网络上,我希望他们收到我的提醒。问题是,ssid不是静态的,所以我无法检查它们是否连接到特定的字符串值。这就是为什么我要查看是否可以降低默认会话超时间隔,并通过查看是否可以访问php网页告诉(几秒钟后)它们是否在网络上。
答案 0 :(得分:0)
三个想法:
CNCopyCurrentNetworkInfo
功能检查用户是否在正确的Wi-Fi网络上。如果用户在错误的网络上,则无需等待请求失败。NSTimer
)来显示某种被动用户界面指示器,而不是让网络请求超时(这会导致连接可能仍然成功,如果网络狡猾)说“网络连接错误”(不强制用户与该指标进行交互)。这告诉用户如果由于某种原因网络速度很慢(多路径干扰,微波炉等导致的高数据包丢失等),可能会出现问题而不会导致故障。在您的情况下,由于网络可能正在发生变化,您应该定期与第一个网络请求并行启动其他网络请求,并在运行超过两个或三个请求后取消原始请求。您还可以使用CNCopyCurrentNetworkInfo
- 或者更好的是,可达性 - 来确定网络何时发生变化,并等到您加入网络之后安排第一个请求。