目前即時通訊主要有四種協議:即時信息和空間協議(IMPP)、空間和即時信息協議(PRIM)、針對即時通信和空間平衡擴充的進程開始協議SIP(SIMPLE)以及XMPP。到目前,主流的主要是XMPP和SIP/SIMPLE。安全
SIMPLE利用SIP來發送presence信息。SIP是IETF中爲終端制定的協議。要談SIMPLE,首先要談談SIP,在傳統的電路交換向分組交換演進的過程當中,SIP起到了很關鍵的做用,IMS中的核心協議就是SIP,並已SIP做爲中介來實現PSTN,VOIP,移動網絡的融合。因此從強調開放性的Internet網絡和強調壟斷性的電信網絡兩個網絡屬性來看的話,SIP其實更傾向於後者。SIP包含着完善的網絡互通設計,因此是VOIP的首選。若是你的即時通訊軟件還想與傳統的電話網絡互連的話,SIP應該是首選。SIP經過SDP來描述媒體流,並經過信令交換主被叫的媒體流信息,例如IP地址和端口,再依靠如實時協議(RTP)來進行實際上的媒體鏈接。這個媒體鏈接不單單包括語音,也包括視頻等數據流。因此SIP的即時通訊會話是點對點的,但信令流是依據網絡配置逐級路由傳遞的。並且網絡延伸的範圍包括PC網絡客戶端,PSTN的傳統電話,移動終端,VOIP模擬電話終端,VOIP的小交網絡,接入網等等,無所不到。要支持這麼多網絡,協議的互連互通,因此關於SIP的相關擴展就可想而知,這其中還要包括網管,計費等功能的協調與支持,因此SIP的電信網絡屬性應該更重一些。SIMPLE是SIP爲了支持即時通訊的新特色作出的擴展,實際上是向Internet網絡的迴歸。服務器
若是咱們選擇SIP做爲即時通訊的實現方向的話,應該說沒有問題,正所謂條條大路通羅馬,只要通訊質量好,網絡負載輕,系統安全,業務功能齊全,其實不在意用什麼技術。但前提是你實力足夠強,技術足夠牛。若是是對於搞新產品的小公司來講,若是你不是要去搞VOIP,選擇SIP,比較容易走上封閉的羊腸小道。雖然你實現了即時通訊的業務功能,但你吸引新用戶的能力有限,在如今日益強調網絡社交屬性的今天,很難想象你能吸引多少用戶去安裝一個新的即時通訊的客戶端,用戶通常只會用他們經常使用的MSN,QQ,Skype等等,對於新的即時通訊客戶端,他們已經裝到反胃了。網絡
但若是你實力足夠強,這也不是絕對的,MSN也是基於SIP的,隨着即時通訊的功能日益擴展,私有的協議在不斷擴展,你把你的私有協議開放出來,你也會有追隨者幫你寫XMPP的網關適配模塊,藉助XMPP與其它IM進行互聯互通。但對新起步的公司來講,好像不是那麼容易,那就得本身動手寫,把本身適配到XMPP的網絡中去。可前提是用多少其它客戶端用戶對你的系統感興趣,而且在他們的客戶端中安裝你的應用的插件。ide
因此從這個角度來講,不如直接選擇XMPP,由於大多數IM客戶端不在意與傳統電信網絡的融合,像SKype那樣提供與PSTN的網絡接入。大多數只是純的Internet應用,直接實現點到點的語音、視頻和數據鏈接。基於XMPP的實現,經過加入主流的IM插件,能夠將主流IM的用戶資源引入到你的IM應用中,藉助網絡社交進行推薦,能更快的吸引新用戶,以及他們的好友加入進來。酒好也怕巷子深,因此得藉助XMPP,把酒傳銷出去。至於你們願不肯意經過你的IM客戶端登錄其它主流IM,那就看你設計的功夫了,既要讓用戶接納你,還不要讓他們感受到拉遠了與他們熟悉的IM間的距離。要雙贏。插件
過去你們總以爲XMPP在點對點的媒體流互通支持上還不行,若是經過帶內傳輸媒體信息的話,經過服務器一級級中繼傳輸,那網路開銷可想而知,這還不包括時間上的延遲。其實不少應用都已經支持了點對點的互通,像Libjingle。SIP也就是經過交換主被叫信息直接進行點對點通訊的,XMPP固然也能夠,並且考慮到XML的強大的靈活的擴展功能,搞定任何網絡應用都不成問題,因此對於新功能新需求的實現,不成問題,不過最好看看XMPP的新的擴展規範,沒準別人已經實現了,照着規範來,也好實現你們的互連互通。若是爲快速實現功能,固然能夠本身定製本身的私有協議,沒準還能寫到RFC裏呢。設計
本文只是提供IM通訊技術選擇的一些思路,從個人理解,若是本身要實現一個新的IM應用,選擇XMPP應該更合適一些。這固然也有本身理解上的誤區,歡迎討論和拍磚。視頻