Objective-C 中的长轮询

2024-03-22

我有一个使用 API 来获取网站实时更新的应用程序。他们使用他们所谓的长轮询技术 http://en.wikipedia.org/wiki/Push_technology#Long_polling:

长轮询是一种变体 传统的投票技术和 允许模拟信息 从服务器推送到客户端。和 长轮询,客户端请求 来自服务器的信息 与普通民意调查类似。然而, 如果服务器没有任何 为客户提供的信息, 而不是发送空响应, 服务器保留请求并等待 以获得一些信息。 一旦信息可用 (或在适当的超时后), 完整的响应发送至 客户。客户通常会这样 立即重新索取信息 从服务器,以便服务器 几乎总会有一个可用的 等待请求,它可以用来 传送数据以响应事件。 在 Web/AJAX 上下文中,长轮询是 也称为彗星编程。

长轮询本身并不是推送 技术,但可以在以下情况下使用 没有真正推动的情况 可能的。

基本上,一旦收到响应,就会强制向服务器发出请求。在 iPhone 应用程序中执行此操作的最佳方法是什么?这最终必须在后台运行。


这正是这种用例NSURLConnection sendSynchronousRequest非常适合:

- (void) longPoll {
    //create an autorelease pool for the thread
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    //compose the request
    NSError* error = nil;
    NSURLResponse* response = nil;
    NSURL* requestUrl = [NSURL URLWithString:@"http://www.mysite.com/pollUrl"];
    NSURLRequest* request = [NSURLRequest requestWithURL:requestUrl];

    //send the request (will block until a response comes back)
    NSData* responseData = [NSURLConnection sendSynchronousRequest:request
                            returningResponse:&response error:&error];

    //pass the response on to the handler (can also check for errors here, if you want)
    [self performSelectorOnMainThread:@selector(dataReceived:) 
          withObject:responseData waitUntilDone:YES];

    //clear the pool 
    [pool drain];

    //send the next poll request
    [self performSelectorInBackground:@selector(longPoll) withObject: nil];
}

- (void) startPoll {
    //not covered in this example:  stopping the poll or ensuring that only 1 poll is active at any given time
    [self performSelectorInBackground:@selector(longPoll) withObject: nil];
}

- (void) dataReceived: (NSData*) theData {
    //process the response here
}

或者,您可以使用异步 I/O 和委托回调来完成同样的事情,但在这种情况下这确实有点愚蠢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Objective-C 中的长轮询 的相关文章

  • 为什么 UIWebView 实例不调用scrollViewDidScroll?

    iOS 文档说 UIWeb视图 http developer apple com library ios documentation uikit reference UIWebView Class Reference Reference h
  • UIKIT_EXTERN_CLASS 和 UIKIT_EXTERN,这两个常量是什么?

    当我在文档中定义类时 我总是在 interface 之前看到这两件事 UIKIT EXTERN CLASS 和 UIKIT EXTERN 这些常量代表什么以及为什么 Apple 将其放在类之前 另一件事是 有文件 UIKitDefines
  • 如何使用 iPhone 将照片上传到服务器?

    我正在编写一个 iPhone 应用程序 它可以拍摄照片然后将其上传到服务器 如何使用 Cocoa 将照片上传到服务器 我想我在某处使用 NSUrl Thanks Header interface EPUploader NSObject NS
  • stringFromDate 始终为 NIL

    我知道这是一个重复的问题 但是在 stackoverflow 和 google 上搜索了许多类似的问题后 没有一个解决方案对我有用 我正在尝试将从数据库收到的日期转换为字符串格式以在 iPhone 应用程序中显示 我正在按以下方式将日期转换
  • AVMutableComposition - 导出错误的视频转换

    导出 VideoAsset 后 问题 视频方向是不是原始变换 导出视频层似乎总是景观 尝试去 变换视频层方向 旋转至原始方向 视频层大小 使其全屏尺寸 按原始方向 一些注意事项 videoAsset 的 CGRect 从一开始就是相反的 a
  • UIButton 未出现在 iPhone 5S 上

    总的来说 我对 iOS 开发和开发还很陌生 我一直在开发时间 记录保存应用程序 但遇到了一个奇怪的问题 在我的一个视图控制器上 我有一个 UITableView 每个单元格都是一个按钮 可通往不同的视图控制器 在第一个单元格上 用户应该能够
  • 错误:“消息回复时间太长”向设备手表套件 OS 2 发送消息

    从 Apple Watch 向设备发送消息时出现以下错误 错误域 WCErrorDomain代码 7012 消息回复时间太长 UserInfo NSLocalizedDescription 消息回复时间太长 NSLocalizedFailu
  • 一种简单、干净的方式来切换/交换视图?

    我已经看了几个来源 但我仍然很困惑 我想创建一个具有多个视图的应用程序 只有标准视图 没有表视图或其他任何内容 我可以在其中单击每个视图上的按钮来访问其他视图 我已经看到了多种方法来做到这一点 但对我来说唯一有意义的方法是让应用程序委托负责
  • 如何发布和接收 NSNotifications(目标 C) |通知(Swift 中)?

    是否有一种易于理解的模式如何发送 NSNotification 目标 C 通知 Swift 中 以及如何接收通知 代码片段 文档关于这个主题写了大约 150 页 想看一个简单的例子 发送通知 NSNotificationCenter def
  • 如何在iOS应用程序中实现互斥锁[重复]

    这个问题在这里已经有答案了 可能的重复 GCD 如何从两个线程写入和读取变量 https stackoverflow com questions 11070947 gcd how to write and read to variable
  • 目标操作 uicontrol 事件

    我一定在这里遗漏了一些明显的东西 但是 UIControl有一个方法 void addTarget id target action SEL action forControlEvents UIControlEvents controlEv
  • 为什么我的 x 轴在 iPhone 上不显示核心图?

    编辑 我认为我的问题更好地表述为 我怎样才能有一个不从零开始的 Y 轴 看起来 x 轴总是放置在 y 0 处 但我希望 x 轴位于 y 轴上的某个正数 这是一张包含更多常规数据的图表 我只是希望将 x 轴放置在绘图的最小 y 值 大约 77
  • 在 Objective-C iPad 开发中发布

    我正在尝试发出 POST 请求 但我似乎无法弄清楚出了什么问题 我从服务器收到响应 但我的电子邮件 密码对似乎没有正确发送 读取 由服务器 它告诉我不存在这样的帐户 这是我的代码 它包含在一个函数中 当用户按下我创建的 登录 按钮时调用该函
  • Iphone 上的 Javascript 日期解析

    我正在开发一个针对移动设备的离线 Javascript 网站 iPhone 就是这样的一种移动设备 我正在尝试从 REST API JSON 对象的成员 解析日期 我在用着 Date parse 2010 03 15 10 30 00 这适
  • iPhone 存储大量图像

    我有大量与 sqlite 数据库中的记录相对应的图像 我应该把它们存放在哪里 我有同一张图像的 3 个版本 大号 中号 拇指号 我不想将它们存储在数据库表中 而是从每条记录中引用它们 所有图像都具有相同的名称 每个小 中和大图像文件都将被称
  • 如何将媒体附件添加到 iOS 10 应用程序中的推送通知中?

    有多个示例 您应该如何设置项目来添加使用 媒体附件 技术来显示图像的丰富通知 我已经阅读了其中的大部分内容 但我错过了一些内容 因为我的项目没有使用此有效负载显示任何丰富的通知 使用 APNS Tool 和 Boodle 进行测试 aps
  • iPhone 应用程序名称有哪些限制? (它们记录在[哪里]?!)

    我花了 2 天 和很多头 墙重击 终于发现临时分发对我不起作用的原因是因为我的应用程序名称包含 UTF 8 字符 我仍然对像苹果 iPhone 这样广泛的国际平台如何禁止这种行为感到困惑 i e 如果我的应用程序是一款中国围棋游戏 我是否可
  • 如何使用 AutoLayout 使 UIView 向上滑动动画?

    this is what I like to achieve 我想执行向上滑动动画 用户可以向上滑动 UIView2 并且 UIView2 将在屏幕上停止一半 我知道如何通过 UIButton 操作以模态方式呈现 UIViewControl
  • 在 Swift 中使用 Obj-C 完成块

    在 Objective C 中 我有一个完成块类定义为 File h typedef void MYCompletionBlock BOOL success NSDictionary result NSError error 然后 在 Sw
  • iOS 中的视频可以进行反卷积吗?

    我想拍摄击球手挥动棒球的镜头 但球棒很模糊 视频为 30 fps 通过研究 我发现反卷积似乎是最小化运动模糊的方法 但我不知道是否或如何在我的 iOS 应用程序后处理中实现它 我希望有人能给我指出正确的方向 比如如何在 iOS 中应用反卷积

随机推荐

  • “NSPercientContainer”仅在 iOS 10.0 或更高版本上可用

    我是 iOS 应用程序开发新手 我开发了一个应用程序 在用户登录时显示一个网站 它适用于设置为 10 1 的部署目标 为了使其与 IOS 8 兼容 我尝试将部署目标设置为 8 因为我遇到了以下错误 NSPersistentContainer
  • 控制线段

    这是一个简单的问题 我一直在成功使用 d3 svg line 生成器 但我现在需要能够对整条线中的每个单独段进行更多控制 例如 每个部分可能需要不同的颜色 或者每个片段甚至可能需要不同的厚度 根据相邻片段的厚度逐渐变细或变细 我想知道实现这
  • TFS 中的搁置是什么?

    在 TFS 中搁置仅仅是一种软签入 以便其他团队成员可以看到源代码吗 即搁置的代码不会被编译 对吗 货架有很多用途 主要有 上下文切换 保存当前任务的工作 以便您可以切换到另一个高优先级任务 假设您正在开发一项新功能 只顾自己的事 这时您的
  • 什么是 := 运算符?

    在某些编程语言中 我看到 例如 x y 这是什么 运算符通常被称为 它有什么作用 在所有支持运算符的语言中 这意味着分配 在支持运算符的语言中 the 运算符通常表示相等比较 在语言中 意味着赋值 通常用于相等比较 does mean 我不
  • javascript:动态更改名称属性

    我正在处理这个脚本 它没有错误 但我想在上面添加一些功能 就像当我单击它添加的按钮时一样 但我希望输入文本的名称属性也被更改 这是我的脚本 javascript var a 1 function add var fContent docum
  • 有没有办法使用 Selenium Webdriver (firefox) 记录 http 请求/响应?

    有没有办法使用 Selenium Webdriver firefox 记录 http 请求 响应 我想可以通过代理驱动网络流量并记录它 但也许有更简单的 内部 硒解决方案 在 selenium 频道上问了这个问题 您将需要代理它来捕获请求
  • Android Intent:发送带有附件的电子邮件

    我想通过电子邮件发送多个文件 我找到了这个Android 使用 Intent 实现多个电子邮件附件 https stackoverflow com questions 2264622 android multiple email attac
  • 打印从根节点到叶节点的所有路径 - javascript

    function formCategoryTrees object each object function objectValues var leafCategoryId objectValues id var leafCategoryN
  • 什么是SOA(面向服务的架构)?

    如果你愿意的话 可以叫我巨魔 但我是认真的 新的 SOA 趋势与我 15 年前构建的客户端服务架构究竟有何不同 我一直听到 SOA 但我不明白它与我们一直以来所做的有什么不同 早在 10 年前 我的公司就有多个客户 使用多种语言 使用相同的
  • Visual Studio 中的递归

    当我运行这个非常简单的递归代码时 我发现当函数 recursCheck 使用整数参数时 我的内存在 Win32 模式下跳到 200 MB 在 x64 模式下跳到 45 MB 并且当参数的类型为 short Win32 模式使用的内存为 4
  • cx_Oracle - DLL 加载失败

    我在使用 Python 导入 cx Oracle 时遇到问题 我知道这里已经讨论了 cx Oracle 的很多问题 但在阅读所有相关主题后 我似乎找不到解决我的问题的方法 我有两台机器 一台是我的计算机 另一台是远程工作站 它们具有相似的配
  • SQLDependency -- 无效的 SQL

    我能看出的最好的here http msdn microsoft com en us library ms181122 28SQL 105 29 aspx 我没有违反此查询的任何规则 但更改事件不断触发 状态无效 SELECT COUNT
  • 如何在测试期间在 Helper 中存根函数

    看看这个辅助函数 def show welcome banner controller name competition action name index controller name submissions action name s
  • 如何使用blueimp jquery上传插件获取每个块的md5迭代md5和

    我需要计算迭代的 md5 哈希值并将其发送到我的 upload api 但我不知道怎么办 我正在使用这里找到的教程 http tutorialzine com 2013 05 mini ajax file upload form http
  • 如何排除 Maven 继承的子依赖项中的父 pom 依赖项?

    我在父 pom 中有一个版本为 2 3 的 Jackson 在我的子 pom 中我需要版本 2 9 有什么方法可以排除父 pom 依赖项吗 您可以使用 dependencyManagement 部分覆盖依赖项的版本
  • 如何将一个独立的窗口定位在屏幕上的精确位置?

    我实际上正在开发一个相对复杂的 GTK 2 应用程序 我的应用程序显然有一个主窗口 然后我需要打开一个新的 独立 窗口 我需要将 飞行 窗口放在 中precise屏幕的准确位置 在顶点 of a widget 绘图区域 我需要将新窗口放置在
  • React-Native-Web 错误:rnw_blogpost.bundle.js:1414 Uncaught TypeError: 无法读取未定义的属性(读取“isBatchingLegacy”)

    Adding react native web打包到现有的 RN 应用程序 使用react native init 按照此站点的设置进行操作 https arry medium com how to add react native web
  • 如何使用组成 Gluon 项目的 iOS、android、桌面(和主)的 Gluon 文件夹?

    我正在尝试通过将特定于平台 操作系统的代码放入各自的文件夹中来设置我的 Gluon 项目 在新创建的 Gluon 项目中设置的自动创建的项目 然而 无论我用 Gradle 执行什么任务 它最终都会采取什么Main folder 可以说我想要
  • 如何找到使用 cv.fitEllipse(contour) 获得的椭圆的面积?

    我通过使用获得椭圆ellipse cv2 fitEllipse cnt 它返回一个包含 3 个元素的元组 但我无法找到其中所描述的内容 我想求出所获得的椭圆的面积 我该怎么做 Thanks fitEllipse返回一个由三个元素组成的元组
  • Objective-C 中的长轮询

    我有一个使用 API 来获取网站实时更新的应用程序 他们使用他们所谓的长轮询技术 http en wikipedia org wiki Push technology Long polling 长轮询是一种变体 传统的投票技术和 允许模拟信