CFNetwork框架解析(一)

iOS网络编程层次模型分为三层:
Cocoa层:NSURL, GameKit,WebKit
Core Foundation层: 基于C的CFNetwork 和 CFNetServices
OS层:基于C 的 BSD socket
CFNetwork只是对BSD socket 进行了轻量级的封装,但在iOS中使用CFNetwork的好处是CFNetwork与系统级别的设置以及runloop结合很好,每一个线程都有自己的runloop

webKit: 属于Cocoa层,页面渲染引擎WKWebview
NSURL: 属于Cocoa层,对各类URL请求的封装NSURLRequest
CFNetwork: 属于Core Foundation层,基于C的封装,CFNetServices(write/readstream)
BSD sockets: 属于OS层,基于C的封装   
CFNetwork更侧重于网络协议,NSURLSession侧重于网络请求
CFSocket API  套接字是网络通信的底层,最常用的套接字是BSD套接字.CFSocket是BSD套接字的一个抽象概念.在很小开销的情况下,几乎提供了全部BSD套接字的功能,并将套接字集成到一个Loop中.

CFStream API 读写流,提供一种简单的方法进行媒体数据的交换,与设备无关.你可以为内存中/文件中/网络中的数据创建流,并且你可以在不把数据加载到内存中的情况下使用流.流是一个字节序列串行传输的通信路径,流是单向的,通常情况下,为了双向通信,需要输入(CFReadStream)/输出流(CFWriteStream).
CFStream构建在CFSocket之上,在CFHTTP和CFFTP之下.尽管CFStream不是CFNetwork正式部分,但它是CFNetwork的基础.
CFNetwork API 又分成了几个单独的API,分别负责一个特定的网络协议,这些API可以结合或分开使用,这取决于APP实际需要
CFFTP 使与FTP服务器通信更加便利.创建写入流与读取流,使用读写流,进行的操作:
         从FTP服务器下载文件
         上传文件到FTP服务器
         获得FTP服务器下目录
         创建目录到FTP服务器
CFHTTP 发送和接受HTTP消息,CFFTP是FTP协议的抽象,CFHTTP是HTTP协议的抽象.超文本传输协议HTTP是一种客户端/服务端的请求/响应协议,客户端创建请求消息,请求消息被序列化,转换为原始字节流,发送字节流到服务器,服务器收到进行反序列化处理并响应.
要创建一个HTTP请求,需指定一些基础的内容:
     请求方法: 如GET/POST/HEAD
     URL
     HTTP版本  如1.0,2.0
     消息主题,字节流
     消息头     
消息创建后,需将其序列化后进行传递
CFHTTPAuthentication  完成身份验证
CFHost  获取主机信息,包括名称/地址/可达性信息等.获取信息的过程被称为解析
所有的CFNetwork/CFHost都兼容IPv4/IPv6,使用CFHost,可以透明的使用  
CFNetDiagnostics  连接到网络的应用依赖于一个稳定的链接.如果网络不稳定,这将导致应用程序的问题.采用CFNetDiagnostics API, 用户可以针对网络问题:
      物理连接失败 (未插入电缆)
      网络故障(如 DNS或DHCP服务器不再响应)
      配置失败(如 代理配置不正确)
     参考:https://www.jianshu.com/p/8e8b2c3d8862

发布了36 篇原创文章 · 获赞 16 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_28551705/article/details/88324383
今日推荐