進(jìn)程與線程 進(jìn)程和線程都是由操作系統(tǒng)分配和調(diào)度的程序運(yùn)行的基本單元,,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性。 進(jìn)程是一塊包含了某些資源的內(nèi)存區(qū)域,。操作系統(tǒng)利用進(jìn)程把它的工作劃分為一些功能單元,。進(jìn)程中所包含的一個(gè)或多個(gè)執(zhí)行單元稱為線程(thread)。進(jìn)程還擁有一個(gè)私有的虛擬地址空間,,該空間僅能被它所包含的線程訪問。
######################################################### 多線程 多線程編程是防止主線程堵塞,,增加運(yùn)行效率等等的最佳方法,。而原始的多線程方法存在很多的毛病,包括線程鎖死等,。在Cocoa中,,Apple提供了NSOperation這個(gè)類,,提供了一個(gè)優(yōu)秀的多線程編程方法。 本次介紹NSOperation的子集,,簡(jiǎn)易方法的NSInvocationOperation:
一個(gè)NSOperationQueue 操作隊(duì)列,,就相當(dāng)于一個(gè)線程管理器,而非一個(gè)線程,。因?yàn)槟憧梢栽O(shè)置這個(gè)線程管理器內(nèi)可以并行運(yùn)行的的線程數(shù)量等等 ######################################################### HTTP協(xié)議詳解 HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,,由于其簡(jiǎn)捷、快速的方式,,適用于分布式超媒體信息系統(tǒng),。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規(guī)范化工作正在進(jìn)行之中,。 http(超文本傳輸協(xié)議)是一個(gè)基于請(qǐng)求與響應(yīng)模式的,、無(wú)狀態(tài)的、應(yīng)用層的協(xié)議,,?;?/span>TCP的連接方式,HTTP1.1版本中給出一種持續(xù)連接的機(jī)制,,絕大多數(shù)的Web開發(fā),,都是構(gòu)建在HTTP協(xié)議之上的Web應(yīng)用。
URL HTTP URL (URL統(tǒng)一資源定位符是一種特殊類型的URI是他的子類,包含了用于查找某個(gè)資源的足夠的信息)
######################################################### TCP/UDP區(qū)別聯(lián)系 TCP---傳輸控制協(xié)議,提供的是面向連接,、可靠的字節(jié)流服務(wù),。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)TCP連接,,之后才能傳輸數(shù)據(jù),。TCP提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù),,檢驗(yàn)數(shù)據(jù),,流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端,。 UDP---用戶數(shù)據(jù)報(bào)協(xié)議,,是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。UDP不提供可靠 性,,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,,且沒 有超時(shí)重發(fā)等機(jī)制,,故而傳輸速度很快 TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議,,也就是說,,在正式收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接,。一個(gè)TCP連接必須要經(jīng)過三次“對(duì)話”才能建立起來,,我們來看看這三次對(duì)話的簡(jiǎn)單過程:1.主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包,;2.主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送,一個(gè)在接收,,協(xié)調(diào)工作)的數(shù)據(jù)包;3.主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā),,你接著吧,!”,這是第三次對(duì)話,。三次“對(duì)話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,,經(jīng)過三次“對(duì)話”之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù),。 UDP(User Data Protocol,,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議。它是面向非連接的協(xié)議,,它不與對(duì)方建立連接,,而是直接就把數(shù)據(jù)包發(fā)送過去! UDP適用于一次只傳送少量數(shù)據(jù),、對(duì)可靠性要求不高的應(yīng)用環(huán)境,。
tcp協(xié)議和udp協(xié)議的差別 是否連接面向連接面向非連接 傳輸可靠性可靠不可靠 應(yīng)用場(chǎng)合傳輸大量數(shù)據(jù)少量數(shù)據(jù) 速度慢快
######################################################### NSURLConnection 蘋果公司提供了NSURLConnection進(jìn)行同步異步請(qǐng)求,使用到類有NSURL/NSURLRequst/NSURLResponse等 同步異步請(qǐng)求:同步一旦發(fā)送數(shù)據(jù)程序停止用戶交互知道數(shù)據(jù)請(qǐng)求完成,。異步不會(huì)柱塞主線程而會(huì)建立一個(gè)新的線程來炒作,,發(fā)布請(qǐng)求后依然ui交互。 服務(wù)器訪問路徑支持get與post:get經(jīng)參數(shù)寫在訪問路徑上安全性不高,,_post請(qǐng)求將參數(shù)寫在body里安全,,數(shù)據(jù)大。
socket連接和http連接的區(qū)別 簡(jiǎn)單說,,你瀏覽的網(wǎng)頁(yè)(網(wǎng)址以http://開頭)都是http協(xié)議傳輸?shù)侥愕臑g覽器的, 而http是基于socket之上的,。socket是一套完成tcp,udp協(xié)議的接口,。 HTTP協(xié)議:簡(jiǎn)單對(duì)象訪問協(xié)議,,對(duì)應(yīng)于應(yīng)用層 ,HTTP協(xié)議是基于TCP連接的 tcp協(xié)議: 對(duì)應(yīng)于傳輸層 ip協(xié)議: 對(duì)應(yīng)于網(wǎng)絡(luò)層 Socket是對(duì)TCP/IP協(xié)議的封裝,,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API),,通過Socket,,我們才能使用TCP/IP協(xié)議,。 http連接:http連接就是所謂的短連接,即客戶端向服務(wù)器端發(fā)送一次請(qǐng)求,,服務(wù)器端響應(yīng)后連接即會(huì)斷掉,; socket連接:socket連接就是所謂的長(zhǎng)連接,理論上客戶端和服務(wù)器端一旦建立起連接將不會(huì)主動(dòng)斷掉,;但是由于各種環(huán)境因素可能會(huì)是連接斷開,,比如說:服務(wù)器端或客戶端主機(jī)down了,網(wǎng)絡(luò)故障,,或者兩者之間長(zhǎng)時(shí)間沒有數(shù)據(jù)傳輸,,網(wǎng)絡(luò)防火墻可能會(huì)斷開該連接以釋放網(wǎng)絡(luò)資源。所以當(dāng)一個(gè)socket連接中沒有數(shù)據(jù)的傳輸,,那么為了維持連接需要發(fā)送心跳消息~~具體心跳消息格式是開發(fā)者自己定義的 我們已經(jīng)知道網(wǎng)絡(luò)中的進(jìn)程是通過socket來通信的,,那什么是socket呢?socket起源于Unix,,而Unix/Linux基本哲學(xué)之一就是“一切皆文件”,,都可以用“打開open –> 讀寫write/read –> 關(guān)閉close”模式來操作。我的理解就是Socket就是該模式的一個(gè)實(shí)現(xiàn),,socket即是一種特殊的文件,,一些socket函數(shù)就是對(duì)其進(jìn)行的操作(讀/寫IO、打開,、關(guān)閉),,這些函數(shù)我們?cè)诤竺孢M(jìn)行介紹。
我們?cè)趥鬏敂?shù)據(jù)時(shí),,可以只使用(傳輸層)TCP/IP協(xié)議,,但是那樣的話,如果沒有應(yīng)用層,,便無(wú)法識(shí)別數(shù)據(jù)內(nèi)容,,如果想要使傳輸?shù)臄?shù)據(jù)有意義,則必須使用到應(yīng)用層協(xié)議,,應(yīng)用層協(xié)議有很多,,比如HTTP、FTP,、TELNET等,,也可以自己定義應(yīng)用層協(xié)議。WEB使用HTTP協(xié)議作應(yīng)用層協(xié)議,,以封裝HTTP文本信息,,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡(luò)上。 (HTTP是轎車,,提供了封裝或者顯示數(shù)據(jù)的具體形式;Socket是發(fā)動(dòng)機(jī),,提供了網(wǎng)絡(luò)通信的能力,。) 2)Socket是對(duì)TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,,而是一個(gè)調(diào)用接口(API),通過Socket,,我們才能使用TCP/IP協(xié)議,。Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已,是對(duì)TCP/IP協(xié)議的抽象,,從而形成了我們知道的一些最基本的函數(shù)接口,。 下面是一些的重要的概念,特在此做摘抄和總結(jié),。 一,。什么是TCP連接的三次握手 第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),,等待服務(wù)器確認(rèn),; 握手過程中傳送的包里不包含數(shù)據(jù),,三次握手完畢后,,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)。理想狀態(tài)下,,TCP連接一旦建立,,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前,TCP 連接都將被一直保持下去,。斷開連接時(shí)服務(wù)器和客戶端均可以主動(dòng)發(fā)起斷開TCP連接的請(qǐng)求,,斷開過程需要經(jīng)過“四次握手”(過程就不細(xì)寫了,,就是服務(wù)器和客戶端交互,最終確定斷開) 二,。利用Socket建立網(wǎng)絡(luò)連接的步驟 建立Socket連接至少需要一對(duì)套接字,,其中一個(gè)運(yùn)行于客戶端,稱為ClientSocket ,,另一個(gè)運(yùn)行于服務(wù)器端,,稱為ServerSocket 。 套接字之間的連接過程分為三個(gè)步驟:服務(wù)器監(jiān)聽,,客戶端請(qǐng)求,,連接確認(rèn)。 1,。服務(wù)器監(jiān)聽:服務(wù)器端套接字并不定位具體的客戶端套接字,,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài),,等待客戶端的連接請(qǐng)求,。 2??蛻舳苏?qǐng)求:指客戶端的套接字提出連接請(qǐng)求,,要連接的目標(biāo)是服務(wù)器端的套接字。為此,,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求,。 3,。連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān) 聽到或者說接收到客戶端套接字的連接請(qǐng)求時(shí),就響應(yīng)客戶端套接字的請(qǐng)求,,建立一個(gè)新的線程,,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,, 雙方就正式建立連接,。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求,。 三,。HTTP鏈接的特點(diǎn) HTTP協(xié)議即超文本傳送協(xié)議(Hypertext Transfer Protocol ),是Web聯(lián)網(wǎng)的基礎(chǔ),,也是手機(jī)聯(lián)網(wǎng)常用的協(xié)議之一,,HTTP協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用。 HTTP連接最顯著的特點(diǎn)是客戶端發(fā)送的每次請(qǐng)求都需要服務(wù)器回送響應(yīng),,在請(qǐng)求結(jié)束后,,會(huì)主動(dòng)釋放連接,。從建立連接到關(guān)閉連接的過程稱為“一次連接”。 四,。TCP和UDP的區(qū)別 1,。TCP是面向鏈接的,雖然說網(wǎng)絡(luò)的不安全不穩(wěn)定特性決定了多少次握手都不能保證連接的可靠性,,但TCP的三次握手在最低限度上(實(shí)際上也很大程度上保證了)保證了連接的可靠性,;而UDP不是面向連接的,UDP傳送數(shù)據(jù)前并不與對(duì)方建立連接,,對(duì)接收到的數(shù)據(jù)也不發(fā)送確認(rèn)信號(hào),,發(fā)送端不知道數(shù)據(jù)是否會(huì)正確接收,當(dāng)然也不用重發(fā),,所以說UDP是無(wú)連接的,、不可靠的一種數(shù)據(jù)傳輸協(xié)議。 2,。也正由于1所說的特點(diǎn),使得UDP的開銷更小數(shù)據(jù)傳輸速率更高,,因?yàn)椴槐剡M(jìn)行收發(fā)數(shù)據(jù)的確認(rèn),,所以UDP的實(shí)時(shí)性更好。 |
|