NSURLConnection与NSStream进行快速服务器通信
假设我们有一个显示某种仪表盘的应用程序。 然而,这个仪表板应该经常更新(例如每500毫秒)。 我熟悉长时间拉取请求并知道如何在某些后台线程中使用NSURLConnection实现它们。 但是,这似乎会导致两个大问题 - 请求/响应并发性和在如此短的时间间隔内长请求的开销。 虽然第一个问题可以通过一些技术来解决,但我认为对服务器的这种频繁的请求是一个普遍的问题。
所以经过一些研究后,我发现了NSStream类,它是NSInputStream&NSOutputStream类。 我的想法是连接服务器,并保持它一直活着。 并以500ms的间隔在输出流处发送GET请求并从输入流中读取数据。
所以这里是我的问题:
UPDATE
我已经实现了经典的方式。 当我点击请求的方法时,如果上一个请求尚未完成,我将取消它。 所以基本上我一次只有一个活动连接来防止并发。 另外,如果我没有收到响应500毫秒,我根本不需要这个响应,因为它已经过时了。 我在Wi-Fi和3G方面取得了非常出色的成绩。 正如我期望的那样,每3到4次请求就会有一次响应丢失。
不过还是想知道这些溪流。 我确实试图关注这个apple ref,但是当我通过输出流发送HTPP GET时,我的输入流从服务器返回403 Forbidden。 这可能完全是服务器问题,但我不确定这是否正确,以及是否值得更换服务器端。
Q1)我是否在正确的轨道上实现这一目标?
A)我会建议WebSockets
Q2)服务器是否应该以某种处理这种连接的特殊方式做准备(我的意思是在一段时间后不会丢弃连接)?
答)即使您可以尝试在Web服务器上配置永久(Keep-Alive)连接以轻松完成它,我会建议WebSockets
Q3)跳过连接建立以提高应用性能并降低仪表板刷新时间有真正的好处吗?
A)是的,连接开放和关闭是昂贵的过程,这就是为什么有Keep-alive连接,谷歌也推出SPDY for Webapps.so套接字将为您解决这个问题。
的WebSockets
是很好的方式去。 频繁轮询不是一种方法,因为您经常在0.5秒内联系服务器
WebSocket提供全双工通信。另外,WebSocket在TCP之上启用消息流。 仅TCP就处理字节流,没有固有的消息概念
WebSocket协议在2011年由IETF标准化为RFC 6455,Web IDL中的WebSocket API由W3C标准化
WebSocket旨在在Web浏览器和Web服务器中实现,但它可以被任何客户端或服务器应用程序使用。 WebSocket协议是一个独立的基于TCP的协议。 它与HTTP的唯一关系是它的握手被HTTP服务器解释为升级请求。 WebSocket协议使得浏览器和网站之间可以进行更多的交互,促进实时内容和实时游戏的创建。 这可以通过为服务器提供一种标准化的方式来向浏览器发送内容而不被客户请求,并且允许消息在保持连接打开的同时来回传递。 通过这种方式,浏览器和服务器之间可以进行双向(双向)对话
你可以在这里找到更多关于WebSockets的信息
以下是Objective C SocketRocket和UnittWebSocketClient上的一些很好的WebSocket客户端库
注意:
这些库使用NSStream
希望这可以帮助
只要你的服务器是HTTP服务器,服务器在返回结果后就会断开你的连接。 因此,如果您想保持足够长的连接时间,则必须实现基于NSStream / Socket(iOS和Server)的协议。 您可以选择像WebSocket这样着名的基于套接字的协议,Square的SocketRocket是基于NSStream的iOS着名库。
如果您的仪表板需要实时更新,我认为值得部署基于NSStream / Socket的协议。
链接地址: http://www.djcxy.com/p/96719.html上一篇: NSURLConnection vs NSStream for rapid server communication