1

我在提供本地图像目录的 MacOSX 应用程序(服务器)中使用CocoaHTTPServer。我有一个相应的 iOS 应用程序(客户端),它使用AFHTTPRequestOperation(AFNetworking)通过本地网络从 Mac 检索图像文件。这运作良好。

接下来我想做的是,当用户在 Mac 应用程序中选择特定图像时,会通知 iPad 应用程序下载该图像并显示它。

我目前采用的方法是提供一个简单的 imageToDisplay.txt 文件,其中包含要显示的图像的文件名。iPad 应用程序不断地轮询这个文件,如果文件名发生变化,它会下载它,等等。它可以工作,但看起来很笨重。我曾想过在服务器上实现一个 GET 方法,该方法也会返回文件名。这种方法仍然需要客户端轮询。

有没有更优雅的方式来触发下载(无需轮询)我已经拥有的部分?本质上是从服务器向客户端发送消息- “立即下载 image27.jpg”

4

1 回答 1

1

WebSockets (SocketRocket)

有几种方法可以实现这一点。如评论中所述,WebSockets 就是其中之一。适用于 iOS 的最强大的免费 WebSockets 库是SocketRocket(押韵)。我刚刚链接到的页面上有大量示例(也押韵)代码,因此我不会在此处包含任何代码。

AF网络

由于您已经在使用 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];

只要您的客户端不取消,它就会在发生更新时继续从服务器接收更新。

您的服务器需要以适当的格式发送数据,并且有一个Rack::Scaffold 的实验分支可以执行此操作。

笔记

如果您每周只更改一次图像,这些方法可能会过大;在这种情况下,您应该将图像缓存一段合理的时间。

于 2013-08-30T00:04:57.287 回答