iOS上用于服务器推送事件的推荐替代方案,不使用WebKit。

7
我希望在我的本地iOS应用中接收服务器发送的事件,但不使用webkit/Safari。根据我所找到的资料,NSURLConnection不太适合,因为它分块响应。我也看了ZTWebSocket库(显然很好,但我正在寻找SSE,而不是WebSockets)。CocoaAsyncSocket是否合适?或者只限于纯TCP套接字通信?
我有一个潜在的怀疑,即我可能错过了一些明显的东西,否则已经有库或示例了。提前感谢您的帮助。

@ilmiacs提出了一个有趣的问题:DOM事件是SSE消费的核心。就我所知,关于objective-c的一点点知识包括在objective-C中访问DOM事件的选择非常少。我想,在iOS上实现SSE的另一种选择是实现UIWebView(内置支持),然后使用javascript回调从iFrame内的objective-C函数。像这样。[链接](http://blog.techno-barje.fr/post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript/) - David Carrico
3个回答

3
在进行更多研究后,我认为在iOS上实现无需使用WebKit的服务器发送事件的最佳方法是使用自定义的NSConnection/NSRequest工具集。我选择了ASIHTTPRequest库。该库允许您明确控制连接对象上的持久性属性(必要),控制数据在流中接收时的方式,存储响应(例如在本地文件中)等。
更不用说它还包含了许多其他有用的网络扩展/定制(改进的可达性观察器,用于异步的简化API,排队功能,甚至能够加载整个网页(包括CSS、js等))。
在服务器端,我使用cyclone-sse(tornado)和nginx(作为反向代理)。非常令人兴奋,现在我可以同时看到我的SSE被推送到我的iOS模拟器和浏览器订阅者。Cyclone甚至处理所有连接并为我提供一个支持简单POST消息推送的API(也支持AMQP和Redit)...
长话短说,ASIHTTPRequest对我来说是完美的解决方案。

3
SSE是一种HTTP技术,它绑定到一个开放的HTTP连接。CocoaAsyncSocket是原始的TCP/UDP套接字,并不知道任何关于HTTP的内容。所以,正如您所怀疑的那样,CocoaAsyncSocket不会提供SSE。
我不知道是否有任何独立的SSE实现(就像独立的Websocket实现一样),这可能是您正在寻找的。但我也不知道这是否有意义,因为SSE发送DOM事件形式的消息,在HTML上下文中最为敏感,据我所见。
如果你想要实现的只是向你的iOS应用程序发送消息,并且在技术选择方面自由,原始套接字就可以了。但根据你的需求,Websockets更可能适合你的需要。看看SocketRocket

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接