我在提供本地镜像目录的 MacOSX 应用程序(服务器)中使用 CocoaHTTPServer。我有一个相应的 iOS 应用程序(客户端),它使用 AFHTTPRequestOperation (AFNetworking) 通过本地网络从 Mac 检索图像文件。这运作良好。
我接下来要做的是,当用户在 Mac 应用程序中选择特定图像时,iPad 应用程序会收到通知下载该图像并显示它。
我目前采用的方法是提供一个简单的 imageToDisplay.txt 文件,其中包含要显示的图像的文件名。 iPad 应用程序不断轮询此文件,如果文件名更改,它会下载它,等等。它可以工作,但看起来很笨重。我想过在服务器上实现一个 GET 方法,该方法也会返回文件名。这种方法仍然需要客户端轮询。
是否有更优雅的方式来触发下载(无需轮询)我已经存在的部分? 本质上是从服务器向客户端发送消息 - “立即下载 image27.jpg”
最佳答案
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];
只要您的客户端没有取消,它就会在更新发生时继续从服务器接收更新。
您的服务器需要以适当的格式发送数据,并且有一个 experimental branch of Rack::Scaffold就是这样做的。
注意事项
如果您每周只更换一次形象,这些方法可能就有些矫枉过正了;在这种情况下,您应该将图像缓存一段合理的时间。
关于ios - 使用 CocoaHTTPServer 向 "send"发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18497671/