我在MacOSX应用程序(服务器)中使用 CocoaHTTPServer ,该应用程序提供本地图像目录。我有一个相应的iOS应用程序(客户端),它使用 AFHTTPRequestOperation (AFNetworking)通过本地网络从Mac检索图像文件。这很有效。
接下来我要做的是,当用户在Mac应用程序中选择特定图像时,会通知iPad应用程序下载该图像并显示它。
我目前使用的方法是提供一个简单的imageToDisplay.txt文件,其中包含要显示的图像的文件名。 iPad应用程序不断轮询此文件,如果文件名更改,则下载它等。它可以工作,但看起来很笨重。我曾想过在服务器上实现一个GET方法,它也会返回文件名。这种方法仍然需要客户进行轮询。
是否有更优雅的方式来触发下载(不进行轮询)我已经拥有的部分? 基本上从服务器向客户端发送消息 - “立即下载image27.jpg”
答案 0 :(得分:1)
有几种方法可以实现这一点。正如评论中所指出的,WebSockets就是其中之一。适用于iOS的最强大的免费WebSockets库是SocketRocket(押韵)。我刚刚链接的页面上有足够的样本(也是押韵)代码,因此我不会在此处包含任何内容。
由于您已经在使用AFNetworking,您还可以查看新的AFNetworking 2.0(即将发布),其中包括通过Rocket支持实时网络。
这将允许您的应用维持开放式连接,并且看起来像这样:
[client SUBSCRIBE:@"/currentImage" usingBlock:^(NSArray *operations, NSError *error) {
for (AFJSONPatchOperation *operation in operations) {
switch (operation.type) {
case AFJSONReplaceOperationType:
// replace old image with new image
break;
default:
break;
}
}
} error:nil];
只要您的客户端没有取消,它就会在服务器发生时继续从服务器接收更新。
您的服务器需要以适当的格式发送数据,并且experimental branch of Rack::Scaffold可以执行此操作。
如果您每周只更换一次图像,这些方法可能会有些过分;在这种情况下,您应该将图像缓存一段合理的时间。