ios - 使用 CocoaHTTPServer 向 "send"发送消息

标签 ios macos afnetworking cocoahttpserver

我在提供本地镜像目录的 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/

相关文章:

ios - 通过 Cocoapods 集成 Apptentive iOS SDK 时出现 undefined symbol 错误

macos - 用window.open打开一个在所有工作区中可见的 Electron float 窗口

swift - 检查 NSTextfield 是否为空或 OSX swift

ios - 如何在 JSONRequestOperation 上向 AFNetworking 添加自定义 header

ios - 使用 AFNetworking 的共享扩展未获得成功/失败回调

ios - 快速将自定义类型转换为 CGFloat

iphone - 确定 iPhone Screen Tapped 是否在区域中?

Python 2.6 问题 : Capturing output from tcpdump subprocess

ios - AFNetworking 的 requestWithMethod :path:parameters: Returning NSMutableURLRequest That Doesn't Persist

ios - 在 Xcode 7.3 中使用 RuntimeBrowser 生成的私有(private)框架