NSStream<三>

NSStream是一个Cocoa 级别的API,构建在CFNetwork之上,作为NSURLConnection的基础,旨在完全一些底层的网络任务。类似于NSConnection,NSStream提供了一种机制;用以与远程服务器或本地文件进行通信。不过,可以通过NSStream在诸如telnet或SMTP等NSURLConnection不支持的协议之上进行通信。
NSStream提供的额外控制是有代价的。它并没有提供对处理HTTP/S响应状态码或认证的内建支持。它所发出与接收的数据都位于C缓冲中,Objective-C开发者对此可能不大熟悉。它还无法管理多个外发请求,需要子类化才能添加这个特性。NSStream是异步的,通过NSStreamDelegate实现通信更新。

关于底层网络的实现有待补充…

iOS 网络 API <二>

框架栈的每一层都提供了一套关键的API.为开发者提供了各种功能与控制。 

每一层都比下一层提供更高的抽象(图可参见上一篇博文)。然而,这种抽象的代价就是丧失了某些控制。

接下来我们概述下iOS中关键的网络api以及使用时要注意的:

(1).NSURLConnection
NSURLConnection是一个 Cocoa 级别的API,它提供了一个简单的方法来加载URL请求,可以与Web Service交互、获取图片或视频,或者只是简单地得到一个格式化的HTML文档。
它构建在NSStream之上,并且在设计时针对如下4个常见的URI模式进行了优化支持:文件、HTTP、HTTPS与FTP。 虽然NSURLConnection限制了你所能使用的协议,但它对缓存读写的很多底层工作进行了抽象,包括对认证内建支持。并且提供了一个健壮的缓存引擎。
NSURLConnection接口中的内容并不多,它主要依赖于NSURLConnectionDelegate 协议,应用可以凭借后者介入到连接生命周期的很多点上。在默认情况下,NSURLConnection请求是异步的;不过有一个便捷方法可以发送同步请求。同步请求会阻塞调用线程,因此你也需要根据这一点来设计应用。这里简单先了解下NSURLConnection.值得一提的是 AFNetworking3.0版本以前就是构建于NSURLConnection。
例子:通过NSURLConnection进行异步\同步下载,GET POST 请求。 连接

(2).Game kit
Game Kit的核心功能在于为iOS 应用程序提供了另一个 点到点 的网络选项。
在传统的网络配置中,Game Kit构建在Bonjour之上;然而 GameKit并不需要网络基础设施就能使用。
它能创建自组(ad-hoc)的Bluetooth Personal Area Networks(PAN),
这样在极少或是没有基础设施的地方,它就是非常棒的网络候选者了。
在创建网络时,Game kit 只需要会话标示符,显示名与连接模式即可。
不需要socket配置或是任何其他底层网络就可以实现连接点之间的通信。
Game kit通过GKSessionDelegate协议进行通信。

(3)Bonjour
Bonjour是apple对零配置(zerocnf)网络的实现。
它提供了一种机制,可以检测并与网络中的设备或服务进行连接,同时无须了解设备的网络地址,
Bonjour通过名字、服务类型与域这个元组来引用服务。它对多播DNS与基于DNS的服务探测,
所要求的底层网络进行了抽象。
在Cocoa层,NSNetService API提供了一个接口,用于发布和解析Bonjour服务的地址信息。
可以通过NSNetServiceBrowser API探测网络上可用的服务。
发布Bonjour服务(甚至使用cocos层的api)需要理解Core Fondation才能配置好通信所需的socket.

简单了解下URI:在电脑术语中,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。
Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称”URI”)进行定位。
URI、URL和URN
URI :Uniform Resource Identifier,统一资源标识符;
URL:Uniform Resource Locator,统一资源定位符;
URN:Uniform Resource Name,统一资源名称。
其中,URL,URN是URI的子集。

深入理解iOS网络框架 <一>

Hello,大家好,我们一起来讨论分析下,iOS网络部分,有哪里不明白的,或者有意见的,没有分析到的地方,请在下面评论,我会及时回复.

我们通常开发一款与网络有关的iOS应用时候,在潜移默化中已经用到了Objective-c中网络层的组织形式,就像下图一样,每个iOS应用都位于某个网络框架栈之上。

本人不理解的是上面apps那一行是做什么的? 有人知道吗?知道的请指点下.

接下来我们简单看一下,这个图。

除了apps那一行,我暂时不知道是干嘛的。

位于最上层的就是cocoa层了:包含了用于URL加载的Objective-C API、Bonjour与Game kit.
Bonjour可能有的人不知道,这里就暂时做个简介,后期会深入说明:
Bonjour(法语中的你好)是一种能够自动查询接入网络中的设备或应用程序的协议。Bonjour 抽象掉 ip 和 port 的概念,让我们聚焦于更容易为人类思维理解的 service。通过 Bonjour,一个应用程序 publish 一个网络服务 service,然后网络中的其他程序就能自动发现这个 service,从而可以向这个 service 查询其 ip 和 port,然后通过获得的 ip 和 port 建立 socket 链接进行通信。通常我们是通过 NSNetService 和 NSNetServiceBrowser 来使用 Bonjour 的,前者用于建立与发布 service,后者用于监听查询网络上的 service。

Cocoa层下面的是
Core Foundation 这是一套C API,其中包含了CFNetwork, 这是大多数应用级别的网络代码的基础。CFNetwork在CFStream与CFSocket之上提供给了一个简单的网络接口。这两个类是针对BSD Socket的轻量级封装,后者形成了最下面的层,与无线硬件最为接近。BSD Socket严格使用C 来实现,向开发者提供了与远程设备或服务器进行通信的完全控制能力。

沿着框架向下移动每一层,你都会获得更为严密的控制,但却失去了上一层提供的易用性与抽象能力,虽然有时是可以的,不过apple建议我们还是要位于CFNetwork层及其之上 。BSD层的原始socket无法访问系统范围的虚拟专用网络,也无法激活Wi-Fi和蜂窝无线电,而这些CFNetwork已经帮我们处理好了。

所以目前为止,我们大多数还是用Cocoa层和Core Foundation 层这两个比较多。

Hardware这层关于硬件的看图层上面有Cellular(移动电话)、Bluetooth(蓝芽(一种无线传输技术))、Wi-Fi这些实现硬件检测网络状态、关于他们和硬件交互的一些东西(个人理解)

这篇只是一起简单看一下iOS网络层的组织形式.文章篇幅较短,希望大家都能够深入理解掌握,接下来我们一步一步会进行探讨。大家有什么不懂得就问就思考,可以在下方评论,这样会理解的更加透彻!谢谢支持!Thanks~

思考: 运行循环?
各种关于网络的API?
响应式的网络应用框架?及其应用场景