设置URLSession Timout Interval

时间:2017-05-24 05:58:06

标签: php swift3 nsurlsession

我正在尝试将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网页告诉(几秒钟后)它们是否在网络上。

1 个答案:

答案 0 :(得分:0)

三个想法:

  • 您可以使用Core Foundation中的CNCopyCurrentNetworkInfo功能检查用户是否在正确的Wi-Fi网络上。如果用户在错误的网络上,则无需等待请求失败。
  • 我假设您正在接收由蜂窝网络接收应该发送到(可能已断开连接的)Wi-Fi网络的请求的停顿。尝试在请求或会话级别禁用蜂窝网络,很多事情可能会开始神奇地工作。
  • 您应该使用普通计时器(NSTimer)来显示某种被动用户界面指示器,而不是让网络请求超时(这会导致连接可能仍然成功,如果网络狡猾)说“网络连接错误”(不强制用户与该指标进行交互)。这告诉用户如果由于某种原因网络速度很慢(多路径干扰,微波炉等导致的高数据包丢失等),可能会出现问题而不会导致故障。

在您的情况下,由于网络可能正在发生变化,您应该定期与第一个网络请求并行启动其他网络请求,并在运行超过两个或三个请求后取消原始请求。您还可以使用CNCopyCurrentNetworkInfo - 或者更好的是,可达性 - 来确定网络何时发生变化,并等到您加入网络之后安排第一个请求。