iOS網絡編程模型


  iOS網絡編程層次結構也分為三層:

 

  • Cocoa層:NSURL,Bonjour,Game Kit,WebKit
  • Core Foundation層:基於 C 的 CFNetwork 和 CFNetServices
  • OS層:基於 C 的 BSD socket

  Cocoa層:是最上層的基於 Objective-C 的 API,比如 URL訪問,NSStream,Bonjour,GameKit等,這是大多數情況下我們常用的 API。Cocoa 層是基於 Core Foundation 實現的。

  Core Foundation層:因為直接使用 socket 需要更多的編程工作,所以蘋果對 OS 層的 socket 進行簡單的封裝以簡化編程任務。該層提供了 CFNetwork 和 CFNetServices,其中 CFNetwork 又是基於 CFStream 和 CFSocket。

  OS層:最底層的 BSD socket 提供了對網絡編程最大程度的控制,但是編程工作也是最多的。因此,蘋果建議我們使用 Core Foundation 及以上層的 API 進行編程。

CFNetwork

  CFNetwork位於底層,但高效地處理協議棧的操作。BSD套接字提供了一些標准對象來方便操作,如與FTP和HTTP服務器通信,解析DNS主機地址。而CFNetwork就是以BSD套接字為基礎。類似,一些cocoa類,如NSURL,使用標准網絡協議與服務器通信,就是以CFNetwork為基礎。除此之外,WebKit是一些cocoa類,顯示窗口中的網絡內容。而NSURL和WebKit都是高層之上,要自行處理網絡協議。


  下圖是CFNetwork框架與Core Foundation框架的結構圖:

  CFSocket API和CFStream API是CFNetwork的基礎。套接字是網絡通訊的基礎,套接字可以連接到網絡或是本地的另一個套接字,並允許數據傳送。最通常的套接字抽象就是BSD Socket。CFSocket又是BSD Socket的抽象。CFSocket幾乎包含BSD Socket的所有功能,而且將Socket融入run-loop中。CFSocket可以處理任何socket,甚至stream-based socket。
  CFStream API提供了輕松的與設備無關的讀寫數據的能力。你可以為內存,文件,網絡(使用套接字)的數據建立stream,可以使用stream而不必立即把所有數據都寫入到內存中。
  stream,流,是一個在搭建的通訊通道里連續傳送的字節序列。steam是單向的,所有有必要建立input(read) stream和output(write) stream。除了基於文件的stream,否則,stream中的數據一經取出消耗,就無法找到。
  CFStream就是對這些stream的抽象,並提供兩種CFType類型:CFReadStream 和 CFWriteStream,他們都符合Core Foundation API的規范。
由圖可以看出,CFStream是基於CFSocket,而且CFStream是CFFTP和CFHTTP的基礎。而CFStream卻不是CFNetwork的一部分,而是Core Foundation的一部分。

  CFNetwork API可以拆成許多獨立的API,可以獨立使用,可以聯合使用。

  • CFFTP API
  • CFHTTP API
  • CFHTTPAuthentication API
  • CFHost API
  • CFNetServices API
  • CFNetDiagnostics API

ASIHTTPRequest

  使用iOS SDK中的HTTP網絡請求API,相當的復雜,調用很繁瑣,ASIHTTPRequest就是一個對CFNetwork API進行了封裝,並且使用起來非常簡單的一套API,用Objective-C編寫,可以很好的應用在Mac OS X系統和iOS平台的應用程序中。ASIHTTPRequest適用於基本的HTTP請求,和基於REST的服務之間的交互。

ASIHTTPRequest功能很強大,主要特色如下:

  • l 通過簡單的接口,即可完成向服務端提交數據和從服務端獲取數據的工作
  • l 下載的數據,可存儲到內存中或直接存儲到磁盤中
  • l 能上傳本地文件到服務端
  • l 可以方便的訪問和操作請求和返回的Http頭信息
  • l 可以獲取到上傳或下載的進度信息,為應用程序提供更好的體驗
  • l 支持上傳或下載隊列,並且可獲取隊列的進度信息
  • l 支持基本、摘要和NTLM身份認證,在同一會話中授權憑證會自動維持,並且可以存儲在Keychain(Mac和iOS操作系統的密碼管理系統)中
  • l 支持Cookie
  • l 當應用(iOS 4+)在后台運行時,請求可以繼續運行
  • l 支持GZIP壓縮數據
  • l 內置的ASIDownloadCache類,可以緩存請求返回的數據,這樣即使沒有網絡也可以返回已經緩存的數據結果
  • l ASIWebPageRequest –可以下載完整的網頁,包括包含的網頁、樣式表、腳本等資源文件,並顯示在UIWebView /WebView中。任意大小的頁面都可以無限期緩存,這樣即使沒有網絡也可以離線瀏覽
  • l 支持客戶端證書
  • l 支持通過代理發起Http請求
  • l 支持帶寬限制。在iOS平台,可以根據當前網絡情況來自動決定是否限制帶寬,例如當使用WWAN(GPRS/Edge/3G)網絡時限制,而當使用WIFI時不做任何限制
  • l 支持斷點續傳
  • l 支持同步和異步請求

  官方網站: http://allseeing-i.com/ASIHTTPRequest/ 。可以從上面下載到最新源碼,以及獲取到相關的資料。

 

by sschu


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM