我正在尝试找到一种方法来打开与 Web 服务的连接,并让该服务根据需要发送 JSON 对象。
假设我从服务中请求 20 个配置文件。与其等待服务构建所有 20 个,该服务将构建第一个配置文件并将其返回给客户端,直到创建所有 20 个。
我一直在使用 AFNetworking,并希望继续使用它。最终,如果需要添加此组件,我想将其贡献回社区。
有人对解决此类问题有任何想法吗?现在我有一个服务每隔几秒推送一次 JSON 来测试。
我正在尝试找到一种方法来打开与 Web 服务的连接,并让该服务根据需要发送 JSON 对象。
假设我从服务中请求 20 个配置文件。与其等待服务构建所有 20 个,该服务将构建第一个配置文件并将其返回给客户端,直到创建所有 20 个。
我一直在使用 AFNetworking,并希望继续使用它。最终,如果需要添加此组件,我想将其贡献回社区。
有人对解决此类问题有任何想法吗?现在我有一个服务每隔几秒推送一次 JSON 来测试。
几个想法:
如果你想打开一个连接并响应来自服务器的传输,基于套接字的模型似乎是有意义的。有关示例,请参阅 Ray Wenderlich 的How To Create A Socket Based iPhone App and Server(服务器端的东西可能会根据您的服务器架构而改变,但它为您提供了一个示例)。但是 AFNetworking 是建立在一个NSURLConnection
框架上的,而不是一个套接字框架上,所以如果你想将你的套接字类集成到那个框架中,将会涉及大量的工作。
第三种方法是保留拉机制,但如果您正在寻找一种以非串行方式使用多个提要的方法,则可以创建多个AFURLConnectionOperation
(或适当的子类)操作,并同时提交它们(您可能希望maxConcurrentOperations
将队列限制为 4 或 5,因为 iOS 只能有这么多并发网络操作)。通过同时发布这些,您可以减轻由网络延迟导致的许多延迟。如果您采用这种方法,可能需要注意线程安全,但它可能比上述两种技术更容易。
这听起来像是一个套接字(或网络套接字,更简单的)的工作。
我不相信 AF 对此有支持。这可以在 NSURLConnection 的 didRecieveData 方法中实现。每次收到一条数据时都会触发此事件,因此您可以从那时开始进行解析和消息传递。不幸的是,我想不出一种非常干净的方法来实现这一点。
也许更好的方法是通过分页式技术处理适当的重新请求。您将请求配置文件的第 1 页,每页为 1,然后请求第 2 页,等等。然后您可以控制流程,即,如果您想并行请求全部或请求一个然后按顺序请求下一个。这将减少实施工作,并且(在我看来)会更清洁和更容易维护。
AFNetworking 支持使用 AFHTTPClient -enqueueBatchOfHTTPRequestOperations:progressBlock:completionBlock:
.
您可以使用此方法返回每个单独的操作,以及批处理中的所有操作何时完成。