6

我想在我的原生 iOS 应用程序中接收服务器发送的事件,但我没有使用 webkit/Safari。根据我的发现, NSURLConnection 不适合,因为它会分块 response。我还查看了ZTWebSocket库(显然很好,但我正在寻找 SSE,而不是 Web 套接字)。CocoaAsyncSocket合适吗?还是仅限于纯 TCP Socket 通信?

我偷偷怀疑我遗漏了一些明显的东西,或者已经有一个图书馆或样本。提前致谢。

4

3 回答 3

3

SSE 是一种 HTTP 技术,因为它绑定到一个开放的 HTTP 连接。CocoaAsyncSocket 是原始 TCP/UDP 套接字,对 HTTP 一无所知。所以不,正如您所怀疑的那样,CocoaAsyncSocket 不会给您 SSE。

我不知道 SSE 的任何独立实现(本着独立 Websocket 实现的精神),这可能是您正在寻找的。但我也不知道这是否有意义,因为据我所知,SSE 以 DOM 事件的形式发送消息,这在 HTML 的上下文中是最明智的。

如果您想要实现的只是向您的 iOS 应用程序发送消息,并且您可以自由选择技术,那么原始套接字就可以了。但是 Websockets 更有可能满足您的需求,这取决于您想要什么。看看SocketRocket

于 2012-10-17T19:40:07.373 回答
3

在对此进行了更多研究之后,我认为在没有 WebKit 的情况下在 iOS 上实现服务器发送事件的最佳方法是使用自定义的 NSConnection/NSRequest 工具集。我选择了ASIHTTPRequest。该库允许您显式控制连接对象上的持久性属性(基本),控制通过流接收的数据,存储响应(例如在本地文件中)等。

更不用说它在网络领域包含许多其他方便的扩展/自定义(改进的可达性观察器,用于异步的简化 API,排队功能,甚至能够加载整个网页(CSS、js 和所有)。

在服务器端,我使用 cyclone-sse (tornado) 和 nginx (作为反向代理)。非常令人兴奋,现在我可以看到我的 SSE 同时推送到我的 iOS 模拟器和浏览器订阅者。Cyclone 甚至可以处理所有连接,并为我提供了一个 API,它支持简单的 POST 消息推送(也支持 AMQP 和 Redit)......

长话短说,ASIHTTPRequest 对我来说是一个完美的解决方案。

于 2012-10-24T23:17:25.203 回答
0

试试这个用 Swift 编写的简单库: https ://github.com/hamin/eventsource.swift

API 超级简单。它现在使用 NSURLConnection。

于 2015-11-28T13:53:10.913 回答