首页 文章

iPhone上的COMET(服务器推送到客户端)[关闭]

提问于
浏览
19

我正在寻求从我的服务器到我的iPhone应用程序 Build 某种套接字/ COMET类型功能 . 基本上,每当用户设法在服务器上设置任意对象'脏'时,例如,更新他们的地址......反馈应该从服务器推送到任何保持对服务器进行实时轮询的客户端 . 我想这是一个流行词,就是COMET . 我知道网页浏览器应用程序有DWR,所以我想,也许最好在我的每个控制器中设置一个隐藏的UIWebView,这样我就可以从他们的javascript框架中开箱即用COMET了?有更优雅的方法吗?

9 回答

  • 1

    有几种解决方案可用于STOMP客户端 .

    STOMP非常简单轻巧,非常适合iPhone .

    我用this one作为我的起点,发现它非常好 . 它有一些对象分配/内存泄漏问题,但一旦我掌握了iPhone编程,这些很容易解决 .

    希望有所帮助!

  • 1

    你可以在你的应用程序中使用普通的TCP / IP套接字吗?

    A)如果是,那么绝对原始的TCP / IP套接字是更优雅的解决方案 . 从您的iPhone应用程序,您只需等待通知事件 . 只要您的应用程序处于打开状态,套接字就会打开 . 如果您愿意,您甚至可以使用HTTP协议/标头 .

    在服务器端,您可以使用一些框架来编写有效处理数千个开放TCP / IP连接的服务器 . 例如TwistedEventMachinelibevent . 然后将服务器主套接字绑定到http端口(80) .

    我们的想法是使用一个服务器,每个客户端只保留一个数据结构 . 从某个数据库应用程序接收更新事件,然后将其推送到正确的客户端 .

    B)不,你必须在iPhone端使用Apache和http客户端 . Then you should know that whole COMET solution is in fact work around for limitations of HTTP protocol and Apache / PHP.

    Apache旨在处理许多短时连接 . 到目前为止,我知道只有最新版本的Apache(mpm worker)可以有效地处理大量打开的连接 . 以前,Apache每个连接都保留一个进程 .

    Web浏览器对一个Web服务器的并发打开连接的限制(实际上是URL地址,例如www.foo.com,而不是www.foo.com的IP地址) . 限制是2个连接 . 此外,浏览器仅允许与下载主HTML页面的同一服务器进行AJAX连接 .

  • 2

    我写了一个web server来做这种事情 . 我通过长轮询通过服务器推送实时更新,例如,我有safari on the iPhone显示该数据 .

    服务器的给定实例应该能够处理几千个并发客户端而不用太费力 . 我有一个计划将它们放在一个层次结构中以允许更多的水平扩展(应该是非常简单的,但不会影响我当前的应用程序) .

  • 3

    WebSync有一个适用于iPhone的javascript客户端,如果's what you'之后

  • 10

    长期民意调查是否适用于您想要实现的目标?您可以在几行常规Javascript中实现客户端,这将比任何框架都要轻 .

    在ObjC中实现它也是微不足道的(连接,等待响应或超时,重复)

    我的问题的答案Simple "Long Polling" example code?希望能够解释一下非常简单的长轮询 .

    基本上你只会照常请求一个URL - 网络服务器会接受连接,但是在它可用之前不会发送任何数据 . 当您收到数据或连接超时时,您重新连接(并重复)

    最复杂的一点是服务器端服务器端,因为你不能使用像Apache这样的常规线程网络服务器,尽管Comet也是如此 .

  • 2

    StreamHub Comet Server适用于开箱即用的iPhone,无需插件或任何必需品 . 只是浏览我的iPhone上的网站,所有的例子都有效,不需要安装Flash或其他任何东西 .

  • 0

    你想通过http为你的应用做通信吗?如果没有,您可以使用CFNetwork框架使用套接字(TCP / UDP)来允许您的应用和服务器进行通信 . 从我所看到的CFNetwork堆栈来看,它非常酷,并且使得读取和写入流相当简单,并允许同步和异步通信 . 它还允许您在套接字上定义回调,以便您获得接收数据,连接等事件的通知 . 因此,在您的示例中,您可以通过套接字将信息发送给您的服务器,然后您可以定义一个回调,该回调将侦听流上的传入数据,然后相应地更新您的应用程序 .

    编辑:做了一点研究,如果你去套接字方法,你可能还想看看NSStream类 . 它们是构建在CFSocket之上的Cocoa抽象 .

  • 0

    你没有't mention what serverside tech you'重新使用 . 但如果它是微软.net(或任何其他遇到此问题的google),彗星有一个简单的选择:http://www.codeplex.com/ncomet .

  • -1

    COMET,LightStreamer,AJAX所有垃圾都被打破了 . 这是TCP的基础知识,没有“保持活动”就可以保证在没有ping通信的情况下保持“保持活动” . 所以如果要保证任何体面的可靠性或及时交付,你可以忘记长轮询 .

    这只是大家在2003年跛脚狂热开始时所看到的炒作......

相关问题