iOS SDK - 如何制作一个" fire and forget"网络电话?

时间:2018-03-18 01:11:08

标签: ios objective-c web-services

我有一个网络服务,我想发送一些信息,但我不关心该服务器的响应。我只是想给服务器提供信息,它可以用它做任何事情。

我怎么能在带有Objective-C的iOS中做到这一点?我现在正在使用后台线程网络电话,但它得到了一个响应,我担心如果用户关闭应用程序或在场景之间导航,那么回复的响应可能会使应用程序崩溃参考

2 个答案:

答案 0 :(得分:0)

我假设您拥有 HTTP 网络服务。在通常的HTTP中,几乎没有“火与忘记”之类的东西。最接近的是发送HEAD请求,因为关于它的约定是对HEAD方法的响应不应该有一个主体。但它仍然只是一个惯例。

如果您自己控制Web服务,例如,您正在使用返回空响应的POST,那么由于HTTP逻辑,您仍然必须:

  1. 建立TCP / TLS连接(对于https)
  2. 发送HTTP请求
  3. 收到状态为200 OK的HTTP响应
  4. 其中每个都可能失败,如果确实如此,您无法确定您的呼叫是否已到达服务器。例如,您的服务器可能会返回500 Server Error,如果您想忽略它,它取决于您,但您必须等待它。如果您没有收到它,它可能只是超时(例如,如果您已发送请求并且很长时间没有响应)。另请注意,将应用程序发送到后台和资源压力可能是未提供请求的另一个原因。

    在许多情况下,如果您想确保提交请求,那么您必须检查响应代码,并可能多次重试您的请求。

    如果您真的不关心您的请求已经发送,您可以忽略NSURLResponse和NSURLSessionDataTask的completionHandler中的NSError。

答案 1 :(得分:-1)

如果您真的担心这一点,并且真的不关心请求是成功还是失败,您可以将请求包装在try块中,然后将其保存到另一个线。这应该完全将其与应用程序的其余部分隔离开来。