XMPP --> 環(huán)信
1.XMPP是網(wǎng)絡(luò)層基于TCP協(xié)議,數(shù)據(jù)層基于XML協(xié)議的即時通訊協(xié)議。所以要實現(xiàn)通訊的話,就要跟TCP一樣,遵循3次握手,建立連接,持有一個長連接,連接期間發(fā)送消息,消息的格式就是XMPP,是一個流,可以分段發(fā),別人也可以分段的將消息給我,在stream開始,/stream結(jié)束。
弊端
2.網(wǎng)絡(luò)層: TCP是一種長連接,因為在這個IP不固定的時代,用戶鎖屏,home,切換其他APP等都會導(dǎo)致自己的TCP連接斷開,所以每次都需要再一次重新建立長連接??梢酝ㄟ^心跳輪循(每五秒鐘向服務(wù)器問一次,每次通過短連接詢問,可以用http的GET或者POST)的方式,服務(wù)器會告訴你是否有消息,如果有再用XMPP方式請求,請求完畢之后,再把TCP斷開,繼續(xù)心跳輪循。
3.數(shù)據(jù)層:XML數(shù)據(jù)體積比較大有冗余,造成不必要的流量浪費,但是沒有辦法解決。
所以在工作的時候,我們通常用環(huán)信來即時通訊,同時環(huán)信還集成了第三方登陸,實現(xiàn)登陸功能。
TCP三次握手協(xié)議
TCP三次握手
三次握手協(xié)議指的是在發(fā)送數(shù)據(jù)的準(zhǔn)備階段,服務(wù)器端和客戶端之間需要進(jìn)行三次交互:
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的syn(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
連接建立后,客戶端和服務(wù)器就可以開始進(jìn)行數(shù)據(jù)傳輸了。