【问题标题】:How to send some count of POST/GET requests simultaneously?如何同时发送一些 POST/GET 请求?
【发布时间】:2016-04-01 08:55:40
【问题描述】:

我正在学习 swift,尝试发送 2 个或更多请求,而不是一个一个地发送,而是同时发送。 NSURLSession 可以吗?

【问题讨论】:

  • 您是否正在向同一主机发送请求?如果是这样,是关联会话配置的HTTPMaximumConnectionsPerHost 属性限制了连接数。
  • here 说默认是6个,但是我怎么能同时发送6个请求,而不仅仅是1个呢?

标签: xcode swift macos httprequest


【解决方案1】:

NSURLSession 是异步的,这意味着它在不同的线程上发送,并且可以同时运行多个。

此链接解释并举例说明如何在主线程等上处理响应:

https://www.raywenderlich.com/110458/nsurlsession-tutorial-getting-started

func sendRequest() {
    let defaultSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
    var dataTask: NSURLSessionDataTask?
    let url = NSURL(string: "http://www.url.com")

    dataTask = defaultSession.dataTaskWithURL(url!) {
      data, response, error in
      dispatch_async(dispatch_get_main_queue()) {
          //Handle response
          if let error = error {
              //Error - handle 'error'              
              print(error.localizedDescription)
          } else if let httpResponse = response as? NSHTTPURLResponse {
              if httpResponse.statusCode == 200 {
                  //Success - handle 'data'
              }
          }
      }
    }

    dataTask?.resume()
}

希望对你有帮助

【讨论】:

  • 是的,我明白这一点,但是如何同时恢复所有准备好的请求?像[task1, task2].resumeAll() = )
  • 你能不能只保留对每个请求的引用,然后执行 task1.resume(); task2.resume() 等
  • 我以为是一个一个,但我会努力的,谢谢)
  • @osadchi 如果您认为我认为您可能不理解异步的含义。异步意味着您恢复 1.,然后恢复 2. 并且 NSURLSession 同时启动它们(第一个下载/上传不必完成第二个下载/上传 - 它们是并行下载的(实际上,第二个可以在第一个之前完成,具体取决于许多因素,例如文件大小))
  • @HAS,好的,我知道了,但是如果我输入task1.resume(); task2.resume();,第一个比第二个更早发送,但我需要同时发送它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 2021-10-26
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多