IOS网络篇3之IOS底层网络架构详解
来源:互联网 发布:翼龙贷java 待遇 编辑:程序博客网 时间:2024/05/22 03:27
紧接这一篇:
IOS网络篇2之客户端离线缓存策略(NSURLProtocol)
首先我们来看看IOS网络的主要层次结构:
IOS的网络层次结构主要分为以下三个部分:
Cocoa层:NSURL(比较常用的)、NSStream、GameKit、WebKit、ASIHttpRequest(第三方框架)
Core Foundation:CFNetwork/CFNetServices、CFStream、CFSocket
OS:BSD Socket
下面我们再来看看Web Kit NSURL CFNetwork BSDSockets 之间的关系。\
NSStream NSURL 都是基于OC的API。
NSURL 也是以CFNetwork作为基础的:
这里可以看到WebKit是基于NSURL的,因此所有的WebKit NSURL的网络请求都是可以被NSURLProtocol截获的。CFNetwork是基于C的。CFNetWork的基础是CFStream和CFSocket。
CFNetwork架构:
CFNetwork提供了对FTP和HTTP的支持(基于CFStream和CFSocket):
有如下的一些API:
CFFTP API
CFHTTP API
CFHTTPAuthentication API
CFHost API
CFNetServices API
CFNetDiagnostics API
套接字是网络通信的基础:
CFSocket是基于BSD Socket的。CFStream提供了和设备无关的读写数据的能力。有CFReadStream和CFWriteStream两种。
CFSocket:
Sockets 是网络通讯的最基本一层。一个 socket 起的作用类似与一个电话线接口,它可以使你连接到另一个 socket 上(不论是本地的还是网络另一端的),并且向那个 socket 发送数据。
最常见的 socket 抽象概念就是 BSD sockets,而 CFSocket 则是 BSD sockets 的抽象。
(1)CFHTTP的使用:
可以应用CFHTTP API创建HTTP恳求,凡是HTTP恳求办法包含GET、HEAD、PUT、POST、DELETE、TRACR、CONNECT和OPTIONS。应用CFHTTP恳求一般4个步调:
•应用CFHTTPMessageCreateRequest函数生成一个CFHTTP消息对象
•应用CFHTTPMessageSetBody函数设置消息内容
•应用CFHTTPMessageSetHeaderFieldValue函数设置消息头
•应用CFHTTPMessageCopySerializedMessage序列化消息
只有http post 须要消息内容,里面是要提交的表单数据。
(2)CFFTP的使用
(3)NSURLConnection
http://blog.csdn.net/kesalin/article/details/8867781
http://www.tekuba.net/program/334/
http://www.raywenderlich.com/3932/networking-tutorial-for-ios-how-to-create-a-socket-based-iphone-app-and-server
http://www.th7.cn/Program/IOS/201407/232562.shtml
下面资料摘抄自网络:NSURLConnection
NSURLConnection是Cocoa层的API,提供了最简单的URL请求,与网络服务相互交互,获取视频图像和HTML格式的文件等功能。他是建立在NSStream基础上的,同时也提供了对四种最主要的URI规范的支持,file,HTTP,HTTPS和FTP。虽然NSURLConnection限制了交互所使用的协议,但是却抽象除了很多更低层次的读写过程以及缓冲机制等,还包含了对认证的支持以及缓存引擎等。NSURLConnection接口比较稀疏,主要是基于NSURLConnectionDelegate协议的,能够使得应用程序在生命周期内随时进行网络连接工作。NSURLConnection请求默认情况下是异步的,但是也可以设置为发送同步请求。同步请求会阻断请求线程,应该根据应用程序的需要来进行选择请求的类型。
Game Kit
Game Kit作为网络编程的核心,提供了点对点的网络连接方式,在传统的网络配置中,Game Kit是建立在Bonjour之上的,但是Game Kit不需要网络设施来运作,他可以创建ad-hocBluetooth Personal Area Networks PAN,在较小区域内或者没有网络基础设施的情况下互相共享资源。Game Kit在创建网络的时候仅仅需要一个会话标识和连接模型,不需要进行socket配置或者底层的网络交互来进行点对点的连接。Game Kit通过GKSessionDelegate协议进行交互。
Bonjour
Bonjour是Apple的零配置网络的实现,Bonjour提供了发现和连接网络设备和服务的机制,可以忽略设备的网络地址,相应的,Bonjour使用的是名称、服务类型、和域来识别服务。Bonjour抽象了底层的网络对于底层的组播DNS和基于DNS的Service Discovery。在Cocoa层,NSNetService API提供了发布和识别Bonjour地址信息的接口,你可以使用NSNetServiceBrowser API来发现可网络上可用的服务。即使是使用Cocoa层的API发布Bonjour服务,也需要对于Core Foundation有所了解才能配置socket的通信。
NSStream
NSStream处于Cocoa层的API,是建立在CFNetwork基础之上的,作为NSURLConnection的基础服务,以及处理底层的网络任务。与NSURLConnection似,NSStream提供了与远程服务器或本地文件的交互机制。但是你可以使用NSStream来通过诸如telnet或者SMTP协议进行交互,而这些协议是NSURLConnection不支持的。但是NSStream提供了这些额外的服务也是有代价的,NSStream没有内置的HTTP或HTTPS状态支持和认证支持。他将数据接受到C缓冲期中,他也不能管理多重外界请求,这些需要通过继承子类才能够提供支持。NSStream是异步的,通过NSStreamDelegte进行交互。
CFNetwork
CFNetwork API是基于BSD socket之上的,用来实现NSStream和URL加载系统以及Bonjour和Game Kit API。他提供了对一些协议如HTTP和FTP的更加高级的支持。CFNetwork与BSD socket的主要区别在于运行循环集成。如果系统使用CFNetwork,输入和输出时间会排列在线程的运行循环当中。如果输入和输出时间发生在另外的现成中,那么需要程序员亲自开启适合的运行循环模式。CFNetwork比URL加载系统提供了更多的配置选项,这是一把双刃剑。这些配置选项在通过CFNetwork创建HTTP请求的时候是可见的。当你创建请求的时候,必须手动添加HTTP头和cookies,而NSURLConnection可以自动添加标准的头和cookie。CFNetwork基础设施是建立在CFSocket和CFStream API之上的,这两个都是Core Foundation层的核心。CFNetwork包括了针对CFFTP等协议来与FTP服务进行交互,还有CFHTTP来发送和接收HTTP消息,以及CFNetService来发布和浏览Bonjour服务。
BSD Sockets
BSD socket建立了网络活动的底层基础,也是整个网络编程结构的最底层。BSD sockets是通过C实现,但是可以在Objective-C代码中使用。一般不推荐使用BSD socket API,因为他没有与操作系统相挂钩。例如,BSD sockets没有涉及到系统级别的VPN以及调用自动激活的Wi-Fi的API或者是蜂窝无线电。Apple推荐仅使用CFNetwork或者更高层次的API。
- IOS网络篇3之IOS底层网络架构详解
- iOS网络底层之CFNetwok
- IOS底层网络之Socket
- iOS网络底层实现
- 【读书笔记】iOS网络-底层网络
- IOS网络底层知识CFHTTP
- iOS之网络篇
- iOS网络编程之系统架构
- iOS网络底层之BSD Socket Libra1ry<1>
- iOS网络底层之BSD Socket Libra1ry<2>
- iOS网络开发编程之NSURLConnection详解
- iOS 开发 网络编程详解之基本概念
- IOS网络访问详解
- iOS 网络编程详解
- iOS网络-AFNetworking详解
- IOS开发网络篇之──ASIHTTPRequest详解
- IOS开发网络篇之──ASIHTTPRequest详解
- IOS开发网络篇之──ASIHTTPRequest详解
- uboot命令下的网络挂载
- linux/unix下setuid/seteuid/setreuid/setresuid
- InnoDB之Dirty page、Redo log
- struts.xml文件之包的配置
- Android开发之手势识别
- IOS网络篇3之IOS底层网络架构详解
- Base64编码及其作用
- C语言结构体对齐与不对齐设置总结
- 贝塞尔曲线生成算法
- 育儿好书推荐
- 【C#】窗体控件随窗体大小改变(包括字体大小)
- 修改android4.0系统的设置的小标题栏
- Python中使用POST方式上传文件
- iOS开发笔记之十九——一个模态视图切换bug引发的思考