COMET(服务器推送到客户端)在iPhone上
我正在寻找从我的服务器到我的iPhone应用程序建立某种套接字/ COMET类型的功能。 从本质上讲,只要用户设法在服务器上设置一个任意对象为'脏',例如更新他们的地址..反馈应该从服务器推送到任何客户端,以实时轮询服务器。 这个流行语是我猜想的COMET。 我知道在那里有用于Web浏览器应用程序的DWR,所以我在想,也许最好在每个控制器中设置一个隐藏的UIWebView,这样我就可以从他们的JavaScript框架中获得COMET的框架了? 有没有更优雅的方法?
有几种解决方案可用于使用STOMP客户端。
STOMP非常简单轻便,非常适合iPhone。
我用这个作为我的出发点,并且发现它非常好。 它有一些对象分配/内存泄漏问题,但是一旦我掌握了iPhone编程,这些很容易被解决。
希望有所帮助!
你可以在你的应用程序中使用普通的TCP / IP套接字吗?
答)如果是,那么一个原始的TCP / IP套接字是更优雅的解决方案。 从你的iPhone应用程序,你只需等待通知事件。 只要应用程序打开,套接字就会打开。 如果你想要,你甚至可以使用HTTP协议/头文件。
在服务器端,您可以使用一些框架来编写能够有效处理数千个打开的TCP / IP连接的服务器。 例如Twisted,EventMachine或libevent。 然后将服务器主套接字绑定到http端口(80)。
这个想法是使用一台服务器,每台客户端只保留一个数据结构。 从某个数据库应用程序接收更新事件,然后将其推送到正确的客户端。
B)不,你必须在iPhone端使用Apache和http客户端。 那么你应该知道,整个COMET解决方案实际上是为了解决HTTP协议和Apache / PHP的限制。
Apache被设计为处理很多短时间连接。 据我所知,只有最新版本的Apache(mpm worker)可以有效地处理大量的打开的连接。 以前,Apache每个连接都保留一个进程。
Web浏览器对一个Web服务器的并发打开连接有限制(实际上URL地址,例如www.foo.com,而不是www.foo.com的IP地址)。 限制是2个连接。 此外,浏览器将只允许AJAX连接到主HTML页面从其下载的相同服务器。
我写了一个Web服务器来完成这种事情。 我通过长时间轮询通过服务器推送实时更新,并且作为示例,我在iPhone上显示该数据的Safari浏览器。
给定的服务器实例应该能够处理几千个并发客户端,而不用太费劲。 我有一个计划,把他们放在一个层次结构允许更多的水平缩放(应该是相当微不足道的,但不会影响我当前的应用程序)。
链接地址: http://www.djcxy.com/p/74459.html