即時通訊的基本技術原理 什么是即時通訊軟件


即時通訊的基本技術原理 什么是即時通訊軟件

文章插圖


即時通訊的基本技術原理 什么是即時通訊軟件

文章插圖

引言
「即時通信」是一種概念,最早的即時通信軟件是ICQ,ICQ是英文中“I seek you”的諧音,意思是“我找你” 。
早期的ICQ很不穩定,盡管如此,還是受到大眾的歡迎,后來國際上退出了不少即時通信的軟件,在這里就不一一列舉了,目前QQ、微信、釘釘算是中國的比較牛X的即時通信軟件了 。
但是,我們今天討論的不是這些聊天軟件,我們這個課題的主要的目的是怎么開發即時通信的功能 。
我們先來了解下即時通信能做什么?
什么是即時通信?
即時通許,又稱實時通訊
即時通訊(Instant Messaging,簡稱IM),他可以允許兩人或多人使用網絡實時的傳遞文字信息、文件、語音及視頻信息,促成雙方或者多方的交流 。
為什么能夠實現即時通信呢?(即時通信的原理是?)
「即時通訊(im)」一般是基于「TCP/IP」和「UDP」進行通訊的,「TCP/IP」和「UDP」都是建立在更低層的IP協議上的兩種通訊傳輸協議 ?!讣磿r通訊(im)」是以數據流的形式,將傳輸數據經分割、打包后,通過兩臺機器之間建立起的虛電路,進行連續的、雙向的、嚴格保證數據正確性的文件傳輸協議 。而「TCP/IP」和「UDP」是以數據報的形式,對拆分后的數據的先后到達順序不做要求的文件傳輸協議 。
「即時通訊(im)」的基本技術原理如下:
通過IM服務器登陸或注銷
用戶A通過列表找到B,用戶B獲得消息并與之交談
通過IM服務器指引建立與B單獨的通訊通道
即時通信有哪些協議?
IMPP(Instant Messaging And PresenceProtocol):即時信息和空間協議
PRIM(Presence and Instant Messaging Protocol):空間和即時信息協議
SIP(Session Initialion Protocol):回話發起協議SIMPLE(SIP for Instant Messaging and Presence Leveraging Extensiong):,SIP即時消息和表示擴展協議,即SIP的擴展協議
XMPP(Extensible Messaging and Presence Protocol):可擴展消息與存在協議
在這四種協議中,XMPP是最靈活的 。XMPP是一種基于XML的協議,它繼承了在XML環境中靈活的發展性 。因此,基于XMPP的應用具有超強的可擴展性 。
經過擴展以后的XMPP可以通過發送擴展的信息,來處理用戶的需求,以及在XMPP的頂端建立如:內容發布系統和基于地址的服務等應用程序 。
而且,XMPP包含了針對服務器端的軟件協議,使之能與另一個進行通話,這使得開發者更容易建立客戶應用程序或給一個配好系統添加功能 。
所以我們主要來聊些xmpp協議
XMPP協議
相關知識
XMPP「可擴展消息處理現場協議」,基于可擴展標記語言(XML)的協議,用于即時消息(IM)以及在線現場探測 。
這個協議允許因特網用戶向因特網上的其他任何人發送即時消息 。
【即時通訊的基本技術原理 什么是即時通訊軟件】XMPP是一種基于XML即時通訊協議
XMPP的官方文檔是RFC 3920,這個文檔定義了登錄,退出,獲取好友,發送消息等等的XML數據傳輸協議
XMPP是一個典型的C/S框架,基本的網絡形式是客戶端通過TCP/IP連接到服務器,通過Socket建立連接,然后再傳輸XML流
XMPP是一種類似于HTTP協議的一種數據傳輸協議,其過程就如同“解包裝–>包裝”的過程,只需要理解其接收的類型及返回的類型,便可以很好的利用XMPP來進行數據通訊.
XMPP官方網站
傳輸格式
<from>A</from>
<to>B</to>
<body>約嗎</body>
可自定義傳輸格式為json格式
{
“from” : “A”,
“to” : “B”,
“body” : “約嗎”
}
XMPP實現即時通信的準備工作
下載Openfire服務器
下載XMPPFrameWork框架

即時通訊的基本技術原理 什么是即時通訊軟件

文章插圖

淺嘗輒止
如果想搭建xmpp開發平臺,推薦一篇文章
用 Dojo 迅速搭建基于 XMPP 的即時消息通信應用
XMPP相關面試題
面試題:是否使用過XMPP,XMPP的實現原理
XMPP是一個即時通訊的協議,它定義好用于即時通訊在網絡上數據傳輸的格式比如登陸、獲取好友列表等等的格式 。
XMPP在網絡傳輸的數據是XML格式,比如登錄:將用戶名和密碼放在xml的標簽中,傳輸給服務器
XMPP是一個基于Socket通訊的網絡協議,目的是為了保存長連接,以實現即時通訊功能
XMPP的客戶端是使用一個「XMPPFramework」框架
XMPP的服務器是使用「Openfire」,一個開源的服務器
假設客戶端獲取到服務器發送過來的好友消息,客戶端需要對XML進行解析,使用的解析框架是「KissXML」框架
面試題:在使用XML的時候有沒有遇到什么困難
發送附件(圖片,語音,文檔…)時比較麻煩
XMPP框架沒有提供附件傳送的功能,需要自己實現
實現方法,把文件上傳到文件服務器,上傳成功后獲取文件保存路徑,再把附件的路徑發送給好友
目前支持我們開發的三方平臺有哪些?
環信
融云、網易云、友盟、騰訊云… …
簡單說下環信,因為他基本上是最老的即時通信三方sdk了
環信是一個即時通訊服務提供商
環信使用的是XMPP協議,它是在XMPP的基礎上進行二次開發,對服務器Openfire和客戶端進行功能模型的添加和客戶端SDK的封裝,環信的本質還是使用XMPP,基于Socket的網絡通訊
環信內部實現了數據緩存,會把聊天記錄添加到數據庫,把附件下載到本地,程序猿更多時間是花到界面用戶體驗上
環信內部已經實現了視頻,音頻,圖片,其他附件發送功能
使用環信可以節約時間成本
不需要公司內部搭建服務器
客戶端的開發,使用環信SDK比使用XMPPFramework更簡潔方便
總結
如果僅僅是想開發即時通信功能,只需要懂一點xmpp的原理及傳輸數據格式即可,如果想深入研究,不妨自己搭建一下開發環境,然后開發體驗一下 。