0.XMPP和環(huán)信
1.什么是Socket。(套接字、兩個(gè)程序的連接、internet上多個(gè)服務(wù)軟件、舉例房間)
2.網(wǎng)絡(luò)通訊的要素。(4點(diǎn))
3.TCP與UDP。
4.Socket通信流程圖
5.Socket和Socket層上的協(xié)議、TCP/UDP、TCP/IP(名字、分開(kāi)的單獨(dú)的作用、TCP/UDP在IP上的例子)、HTTP、XMPP 之間的區(qū)別。
6.長(zhǎng)連接/短連接
http://www.lxweimin.com/p/3167802eb1e5
?:長(zhǎng)連接/短連接
?:怎么與即時(shí)通信、環(huán)信結(jié)合在一起講?
TCP/IP:中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通訊協(xié)議。[通俗]而言:TCP負(fù)責(zé)發(fā)現(xiàn)[傳輸?shù)膯?wèn)題,一有問(wèn)題就發(fā)出信號(hào),要求重新傳輸,直到所有[數(shù)據(jù)安全]正確地傳輸?shù)侥康牡亍6鳬P是給[因特網(wǎng)]的每一臺(tái)聯(lián)網(wǎng)設(shè)備規(guī)定一個(gè)地址。
6.長(zhǎng)連接/短連接
短連接 連接->傳輸數(shù)據(jù)->關(guān)閉連接 HTTP是無(wú)狀態(tài)的,瀏覽器和服務(wù)器每進(jìn)行一次HTTP操作,就建立一次連接,但任務(wù)結(jié)束就中斷連接。 也可以這樣說(shuō):短連接是指SOCKET連接后發(fā)送后接收完數(shù)據(jù)后馬上斷開(kāi)連接。
長(zhǎng)連接 連接->傳輸數(shù)據(jù)->保持連接 -> 傳輸數(shù)據(jù)-> 。。。 ->關(guān)閉連接。 長(zhǎng)連接指建立SOCKET連接后不管是否使用都保持連接,但安全性較差。
什么時(shí)候用長(zhǎng)連接,短連接
長(zhǎng)連接多用于操作頻繁,點(diǎn)對(duì)點(diǎn)的通訊,而且連接數(shù)不能太多情況,。每個(gè)TCP連接都需要三步握手,這需要時(shí)間,如果每個(gè)操作都是先連接,再操作的話那么處理速度會(huì)降低很多,所以每個(gè)操作完后都不斷開(kāi),次處理時(shí)直接發(fā)送數(shù)據(jù)包就OK了,不用建立TCP連接。例如:數(shù)據(jù)庫(kù)的連接用長(zhǎng)連接, 如果用短連接頻繁的通信會(huì)造成socket錯(cuò)誤,而且頻繁的socket 創(chuàng)建也是對(duì)資源的浪費(fèi)。
TCP****短連接
我們模擬一下TCP短連接的情況,client向server發(fā)起連接請(qǐng)求,server接到請(qǐng)求,然后雙方建立連接。client向server發(fā)送消息,server回應(yīng)client,然后一次讀寫就完成了,這時(shí)候雙方任何一個(gè)都可以發(fā)起close操作,不過(guò)一般都是client先發(fā)起close操作。為什么呢,一般的server不會(huì)回復(fù)完client后立即關(guān)閉連接的,當(dāng)然不排除有特殊的情況。從上面的描述看,短連接一般只會(huì)在client/server間傳遞一次讀寫操作
短連接的優(yōu)點(diǎn)是:管理起來(lái)比較簡(jiǎn)單,存在的連接都是有用的連接,不需要額外的控制手段
TCP****長(zhǎng)連接
接下來(lái)我們?cè)倌M一下長(zhǎng)連接的情況,client向server發(fā)起連接,server接受client連接,雙方建立連接。Client與server完成一次讀寫之后,它們之間的連接并不會(huì)主動(dòng)關(guān)閉,后續(xù)的讀寫操作會(huì)繼續(xù)使用這個(gè)連接。
在長(zhǎng)連接的應(yīng)用場(chǎng)景下,client端一般不會(huì)主動(dòng)關(guān)閉它們之間的連接,Client與server之間的連接如果一直不關(guān)閉的話,會(huì)存在一個(gè)問(wèn)題,隨著客戶端連接越來(lái)越多,server早晚有扛不住的時(shí)候,這時(shí)候server端需要采取一些策略,如關(guān)閉一些長(zhǎng)時(shí)間沒(méi)有讀寫事件發(fā)生的連接,這樣可以避免一些惡意連接導(dǎo)致server端服務(wù)受損;如果條件再允許就可以以客戶端機(jī)器為顆粒度,限制每個(gè)客戶端的最大長(zhǎng)連接數(shù),這樣可以完全避免某個(gè)蛋疼的客戶端連累后端服務(wù)。
7.XMPP 與 環(huán)信:
XMPP:
1.是一個(gè)即時(shí)通訊的協(xié)議,規(guī)范了用于即時(shí)通信在網(wǎng)絡(luò)上的傳輸格式,比如登錄,獲取好友列表等的格式。基于的網(wǎng)絡(luò)形式是客戶端通過(guò)TCP/IP鏈接到服務(wù)器,通過(guò)Socket建立鏈接,然后在之上傳輸XML流。
2.客戶端是使用一個(gè)XMPPFramework框架實(shí)現(xiàn),服務(wù)器是使用Openfire,一個(gè)開(kāi)源的服務(wù)器。客戶端獲取到服務(wù)器發(fā)送過(guò)來(lái)的好友消息,客戶端需要對(duì)XML進(jìn)行解析,使用解析框架KissXML框架。
3.類似于HTTP協(xié)議的一種數(shù)據(jù)傳輸協(xié)議,其過(guò)程就如同“解包裝”----->包裝的過(guò)程。只需要理解其接受的類型以及返回的類型,便可以很好的利用XMPP來(lái)進(jìn)行數(shù)據(jù)通訊。
環(huán)信:
1.環(huán)信使用的是XMPP協(xié)議,它是在XMPP基礎(chǔ)上進(jìn)行二次開(kāi)發(fā),對(duì)服務(wù)器Openfire和客戶端進(jìn)行功能模型的添加和客戶端SDK的封裝,環(huán)信的本質(zhì)還是使用XMPP,基于Socket的網(wǎng)絡(luò)通信。
2.環(huán)信內(nèi)部實(shí)現(xiàn)了數(shù)據(jù)緩存,會(huì)把聊天記錄添加到數(shù)據(jù)庫(kù),把附件(音頻文件,圖片文件)下載到本地,使程序員更多時(shí)間是滑到用戶即時(shí)通訊的體驗(yàn)上。其內(nèi)部已經(jīng)實(shí)現(xiàn)了視頻,音頻,圖片和其他附件發(fā)送功能。
3.好處:不需要公司內(nèi)部搭建服務(wù)器,節(jié)約成本,日活30萬(wàn)以下永遠(yuǎn)免費(fèi);客戶端的開(kāi)發(fā),使用環(huán)信SDK比使用XMPPFramework更簡(jiǎn)潔方便。