2

我正在尝试找到一种方法来打开与 Web 服务的连接,并让该服务根据需要发送 JSON 对象。

假设我从服务中请求 20 个配置文件。与其等待服务构建所有 20 个,该服务将构建第一个配置文件并将其返回给客户端,直到创建所有 20 个。

我一直在使用 AFNetworking,并希望继续使用它。最终,如果需要添加此组件,我想将其贡献回社区。

有人对解决此类问题有任何想法吗?现在我有一个服务每隔几秒推送一次 JSON 来测试。

4

3 回答 3

3

几个想法:

  1. 如果你想打开一个连接并响应来自服务器的传输,基于套接字的模型似乎是有意义的。有关示例,请参阅 Ray Wenderlich 的How To Create A Socket Based iPhone App and Server(服务器端的东西可能会根据您的服务器架构而改变,但它为您提供了一个示例)。但是 AFNetworking 是建立在一个NSURLConnection框架上的,而不是一个套接字框架上,所以如果你想将你的套接字类集成到那个框架中,将会涉及大量的工作。

  2. 另一个特定于 iOS 的模型是使用 Apple 的推送通知服务(请参阅本地和推送通知编程指南中与推送相关的部分)。

  3. 第三种方法是保留拉机制,但如果您正在寻找一种以非串行方式使用多个提要的方法,则可以创建多个AFURLConnectionOperation(或适当的子类)操作,并同时提交它们(您可能希望maxConcurrentOperations将队列限制为 4 或 5,因为 iOS 只能有这么多并发网络操作)。通过同时发布这些,您可以减轻由网络延迟导致的许多延迟。如果您采用这种方法,可能需要注意线程安全,但它可能比上述两种技术更容易。

于 2013-05-15T18:53:04.043 回答
1

这听起来像是一个套接字(或网络套接字,更简单的)的工作。

我不相信 AF 对此有支持。这可以在 NSURLConnection 的 didRecieveData 方法中实现。每次收到一条数据时都会触发此事件,因此您可以从那时开始进行解析和消息传递。不幸的是,我想不出一种非常干净的方法来实现这一点。

也许更好的方法是通过分页式技术处理适当的重新请求。您将请求配置文件的第 1 页,每页为 1,然后请求第 2 页,等等。然后您可以控制流程,即,如果您想并行请求全部或请求一个然后按顺序请求下一个。这将减少实施工作,并且(在我看来)会更清洁和更容易维护。

于 2013-05-15T18:27:07.597 回答
0

AFNetworking 支持使用 AFHTTPClient -enqueueBatchOfHTTPRequestOperations:progressBlock:completionBlock:.

您可以使用此方法返回每个单独的操作,以及批处理中的所有操作何时完成。

于 2013-05-23T16:14:19.027 回答