xmpp即時通訊源碼
A. iOS即時通訊 WebSocket Socket
Websocket是應用層第七層上的一個應用層協議,它必須依賴 HTTP 協議進行一次握手 ,握手成功後,數據就直接從 TCP 通道傳輸,與 HTTP 無關了。
Websocket的數據傳輸是frame形式傳輸的,比如會將一條消息分為幾個frame,按照先後順序傳輸出去。這樣做會有幾個好處:
1 大數據的傳輸可以分片傳輸,不用考慮到數據大小導致的長度標志位不足夠的情況。
2 和http的chunk一樣,可以邊生成數據邊傳遞消息,即提高傳輸效率
Socket 其實並不是一個協議。它工作在 OSI 模型會話層(第5層),是為了方便大家直接使用更底層協議(一般是 TCP 或 UDP )而存在的一個抽象層。Socket是渣櫻對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API)。
Socket通常也稱作」套接字」,用於描述IP地址和埠,是一個通信鏈的句柄。網路上的兩個程序通過一個雙向的通訊連接實現數據的交換,這個雙向鏈路的一端稱為一個Socket,一個Socket由一個IP地址和一個埠號唯一確定。應用程序通常通過」套接字」向網路發出請求或者應答網路請求。
Socket在通訊過程中,服務端監聽某個埠是否有連接請求,客戶端向服務端發送連接請求,服務端收到連接請求向客戶端發出接收消息,這樣一個連接就建立起來了。客戶端和服務端也都可以相互發送消息與對方進行通訊,直到雙方連接斷開。
所以基於WebSocket和基於Socket都可以開發出IM社交聊天類的app
我們自己去實現也有很多選擇:
1)首先面臨的就是傳輸協議的選擇,TCP還是UDP?
2)其次是我們需要去選擇使用哪種聊天協議:1.基於Scoket或者WebScoket或者其他的私有協議?2.MQTT?3.還是廣為人詬病的XMPP?
3)我們是自己去基於OS底層Socket進行封裝還是在第三方框架的基礎上進行封裝?
4)傳輸數據的格式,我們是用Json、還是XML、還是谷歌推出的ProtocolBuffer?
5)我們還有一些細節問題需要考慮,例如TCP的長連接如何保持,擾晌心跳機制,Qos機制,重連機制等等...當然,除此之外,我們還有一些安全問題需要考慮。
對於小公司或者技術不那麼成熟的公司,IM一定要用TCP來實現,因為如果你要用UDP的話,需要做的事太多。當然QQ就是用的UDP協議,當然不僅僅是UDP,騰訊還用了自己的私有協議,來保證了傳輸的可靠性,杜絕了UDP下各種數據丟包,亂序等等一系列問題。
總之一句話,如果你覺得團隊技術很成熟,那麼你用UDP也行,否則還是用TCP為好。
首先我們以實現方式來切入,如李叢基本上有以下四種實現方式:
1.基於Scoket原生:代表框架 CocoaAsyncSocket。
2.基於WebScoket:代表框架 SocketRocket。
3.基於MQTT:代表框架 MQTTKit。
4.基於XMPP:代表框架 XMPPFramework。
當然,以上四種方式我們都可以不使用第三方框架,直接基於OS底層Scoket去實現我們的自定義封裝。下面我會給出一個基於Scoket原生而不使用框架的例子,供大家參考一下。
首先需要搞清楚的是,其中MQTT和XMPP為聊天協議,它們是最上層的協議,而WebScoket是傳輸通訊協議,它是基於Socket封裝的一個協議。而通常我們所說的騰訊IM的私有協議,就是基於WebScoket或者Scoket原生進行封裝的一個聊天協議。
所以說到底,iOS要做一個真正的IM產品,一般都是基於Scoket或者WebScoket等,再之上加上一些私有協議來保證的。
微信,QQ這類IM app怎麼做——談談Websocket
iOS即時通訊,從入門到「放棄」?(demo)
iOS即時通訊,從入門到「放棄」?(文檔)
感謝大神塗耀輝
B. java可以搭建im即時通訊嗎
是的,Java可以用來構建即時通訊(IM)應用程序。Java是一種流行的編程語言,擁有許多開發框架和庫,可以幫助開發者快速構建IM應用程序。
一些Java庫和框架可以用於構建IM應用程序,例如:
Netty:一個非同步事件驅動的網路應用程序框架,可以用於構建高性能的IM伺服器。
Smack:一個用於XMPP協議的Java庫,可以用於構建XMPP即時通訊客戶端。
Openfire:一個用於XMPP協議的即時通訊伺服器,可以與Smack一起使用以構建IM應用程序。
Apache MINA:一個靈活且可擴展的網路應用程序框架,可用於構建各種類型的網路應用程序,包括IM應用程序。
總之,Java提供了豐富的開發冊純工具和悉正庫,可以睜姿悔幫助開發人員構建功能強大的即時通訊應用程序。
C. 消息中間件(一)MQ詳解及四大MQ比較
一、消息中間件相關知識
1、概述
消息隊列已經逐漸成為企業IT系統內部通信的核心手段。它具有低耦合、可靠投遞、廣播、流量控制、扮信最終一致性等一系列功能,成為非同步RPC的主要手段之一。當今市面上有很多主流的消息中間件,如老牌的ActiveMQ、RabbitMQ,炙手可熱的Kafka,阿里巴巴自主開發RocketMQ等。
2、消息中間件的組成
2.1 Broker
消息伺服器,作為server提供消息核心服務
2.2 Procer
消息生產者,業務的發起方,負責生產消息傳輸給broker,
2.3 Consumer
消息消費者,業務的處理方,負責從broker獲取消息並進行業務邏輯處理
2.4 Topic
2.5 Queue
2.6 Message
消息體,根據不同通信協議定義的固定格式進行編碼的數據包,來封裝業務數據,實現消息的傳輸
3 消息中間件模式分類
3.1 點對點
PTP點對點:使用queue作為通信載體
說明:
消息生產者生產消息發送到queue中,然後消息消費者從queue中取出並且消費消息。
消息被消費以後,queue中不再存儲,所以消息消費者不可能消費到已經被消費的消息。 Queue支持存在多個消費者,但是對一個消息而言,只會有一個消費者可以消費。
說明:
queue實現了負載均衡,將procer生產的消息發送到消息隊列中,由多個消費者消費。但一個消息只能被一個消費者接受,當沒有消費者可用時,這個消息會被保存直到有一個可用的消費者廳謹輪。
4 消息中間件的優勢
4.1 系統解耦
交互系統之間沒有直接的調用關系,只是通過消息傳輸,故系統侵入性不強,耦合度低。
4.2 提高系統響應時間
例如原來的一套邏輯,完成支付可能涉及先修改訂單狀態、計算會員積分、通知物流配送幾個邏輯才能完成;通過MQ架構設計,就可將緊急重要(需要立刻響應晌鍵)的業務放到該調用方法中,響應要求不高的使用消息隊列,放到MQ隊列中,供消費者處理。
4.3 為大數據處理架構提供服務
通過消息作為整合,大數據的背景下,消息隊列還與實時處理架構整合,為數據處理提供性能支持。
4.4 Java消息服務——JMS
Java消息服務(Java Message Service,JMS)應用程序介面是一個Java平台中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分布式系統中發送消息,進行非同步通信。
5 消息中間件應用場景
5.1 非同步通信
有些業務不想也不需要立即處理消息。消息隊列提供了非同步處理機制,允許用戶把一個消息放入隊列,但並不立即處理它。想向隊列中放入多少消息就放多少,然後在需要的時候再去處理它們。
5.2 解耦
降低工程間的強依賴程度,針對異構系統進行適配。在項目啟動之初來預測將來項目會碰到什麼需求,是極其困難的。通過消息系統在處理過程中間插入了一個隱含的、基於數據的介面層,兩邊的處理過程都要實現這一介面,當應用發生變化時,可以獨立的擴展或修改兩邊的處理過程,只要確保它們遵守同樣的介面約束。
5.3 冗餘
有些情況下,處理數據的過程會失敗。除非數據被持久化,否則將造成丟失。消息隊列把數據進行持久化直到它們已經被完全處理,通過這一方式規避了數據丟失風險。許多消息隊列所採用的」插入-獲取-刪除」範式中,在把一個消息從隊列中刪除之前,需要你的處理系統明確的指出該消息已經被處理完畢,從而確保你的數據被安全的保存直到你使用完畢。
5.4 擴展性
因為消息隊列解耦了你的處理過程,所以增大消息入隊和處理的頻率是很容易的,只要另外增加處理過程即可。不需要改變代碼、不需要調節參數。便於分布式擴容。
5.5 過載保護
在訪問量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量無法提取預知;如果以為了能處理這類瞬間峰值訪問為標准來投入資源隨時待命無疑是巨大的浪費。使用消息隊列能夠使關鍵組件頂住突發的訪問壓力,而不會因為突發的超負荷的請求而完全崩潰。
5.6 可恢復性
系統的一部分組件失效時,不會影響到整個系統。消息隊列降低了進程間的耦合度,所以即使一個處理消息的進程掛掉,加入隊列中的消息仍然可以在系統恢復後被處理。
5.7 順序保證
在大多使用場景下,數據處理的順序都很重要。大部分消息隊列本來就是排序的,並且能保證數據會按照特定的順序來處理。
5.8 緩沖
在任何重要的系統中,都會有需要不同的處理時間的元素。消息隊列通過一個緩沖層來幫助任務最高效率的執行,該緩沖有助於控制和優化數據流經過系統的速度。以調節系統響應時間。
5.9 數據流處理
分布式系統產生的海量數據流,如:業務日誌、監控數據、用戶行為等,針對這些數據流進行實時或批量採集匯總,然後進行大數據分析是當前互聯網的必備技術,通過消息隊列完成此類數據收集是最好的選擇。
6 消息中間件常用協議
6.1 AMQP協議
AMQP即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標准高級消息隊列協議,是應用層協議的一個開放標准,為面向消息的中間件設計。基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同開發語言等條件的限制。
優點:可靠、通用
6.2 MQTT協議
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成為物聯網的重要組成部分。該協議支持所有平台,幾乎可以把所有聯網物品和外部連接起來,被用來當做感測器和致動器(比如通過Twitter讓房屋聯網)的通信協議。
優點:格式簡潔、佔用帶寬小、移動端通信、PUSH、嵌入式系統
6.3 STOMP協議
STOMP(Streaming Text Orientated Message Protocol)是流文本定向消息協議,是一種為MOM(Message Oriented Middleware,面向消息的中間件)設計的簡單文本協議。STOMP提供一個可互操作的連接格式,允許客戶端與任意STOMP消息代理(Broker)進行交互。
優點:命令模式(非topicqueue模式)
6.4 XMPP協議
XMPP(可擴展消息處理現場協議,Extensible Messaging and Presence Protocol)是基於可擴展標記語言(XML)的協議,多用於即時消息(IM)以及在線現場探測。適用於伺服器之間的准即時操作。核心是基於XML流傳輸,這個協議可能最終允許網際網路用戶向網際網路上的其他任何人發送即時消息,即使其操作系統和瀏覽器不同。
優點:通用公開、兼容性強、可擴展、安全性高,但XML編碼格式佔用帶寬大
6.5 其他基於TCP/IP自定義的協議
有些特殊框架(如:redis、kafka、zeroMq等)根據自身需要未嚴格遵循MQ規范,而是基於TCPIP自行封裝了一套協議,通過網路socket介面進行傳輸,實現了MQ的功能。
7 常見消息中間件MQ介紹
7.1 RocketMQ
阿里系下開源的一款分布式、隊列模型的消息中間件,原名Metaq,3.0版本名稱改為RocketMQ,是阿里參照kafka設計思想使用java實現的一套mq。同時將阿里系內部多款mq產品(Notify、metaq)進行整合,只維護核心功能,去除了所有其他運行時依賴,保證核心功能最簡化,在此基礎上配合阿里上述其他開源產品實現不同場景下mq的架構,目前主要多用於訂單交易系統。
具有以下特點:
官方提供了一些不同於kafka的對比差異:
https://rocketmq.apache.org/docs/motivation/
7.2 RabbitMQ
使用Erlang編寫的一個開源的消息隊列,本身支持很多的協議:AMQP,XMPP, SMTP,STOMP,也正是如此,使的它變的非常重量級,更適合於企業級的開發。同時實現了Broker架構,核心思想是生產者不會將消息直接發送給隊列,消息在發送給客戶端時先在中心隊列排隊。對路由(Routing),負載均衡(Load balance)、數據持久化都有很好的支持。多用於進行企業級的ESB整合。
7.3 ActiveMQ
Apache下的一個子項目。使用Java完全支持JMS1.1和J2EE 1.4規范的 JMS Provider實現,少量代碼就可以高效地實現高級應用場景。可插拔的傳輸協議支持,比如:in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports。RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多種語言客戶端 C++、Java、.Net,、Python、 Php、 Ruby等。
7.4 Redis
使用C語言開發的一個Key-Value的NoSQL資料庫,開發維護很活躍,雖然它是一個Key-Value資料庫存儲系統,但它本身支持MQ功能,所以完全可以當做一個輕量級的隊列服務來使用。對於RabbitMQ和Redis的入隊和出隊操作,各執行100萬次,每10萬次記錄一次執行時間。測試數據分為128Bytes、512Bytes、1K和10K四個不同大小的數據。實驗表明:入隊時,當數據比較小時Redis的性能要高於RabbitMQ,而如果數據大小超過了10K,Redis則慢的無法忍受;出隊時,無論數據大小,Redis都表現出非常好的性能,而RabbitMQ的出隊性能則遠低於Redis。
7.5 Kafka
Apache下的一個子項目,使用scala實現的一個高性能分布式Publish/Subscribe消息隊列系統,具有以下特性:
7.6 ZeroMQ
號稱最快的消息隊列系統,專門為高吞吐量/低延遲的場景開發,在金融界的應用中經常使用,偏重於實時數據通信場景。ZMQ能夠實現RabbitMQ不擅長的高級/復雜的隊列,但是開發人員需要自己組合多種技術框架,開發成本高。因此ZeroMQ具有一個獨特的非中間件的模式,更像一個socket library,你不需要安裝和運行一個消息伺服器或中間件,因為你的應用程序本身就是使用ZeroMQ API完成邏輯服務的角色。但是ZeroMQ僅提供非持久性的隊列,如果down機,數據將會丟失。如:Twitter的Storm中使用ZeroMQ作為數據流的傳輸。
ZeroMQ套接字是與傳輸層無關的:ZeroMQ套接字對所有傳輸層協議定義了統一的API介面。默認支持 進程內(inproc) ,進程間(IPC) ,多播,TCP協議,在不同的協議之間切換只要簡單的改變連接字元串的前綴。可以在任何時候以最小的代價從進程間的本地通信切換到分布式下的TCP通信。ZeroMQ在背後處理連接建立,斷開和重連邏輯。
特性:
二、主要消息中間件的比較
D. XMPP協議(IM)
XMPP是一種基於標准通用標記語言的子集XML的協議,它繼承了在XML環境中靈活的發展性。因此,基於XMPP的應用具有超強的可擴展性。經過擴展以後的XMPP可以通過發送擴展的信息來處理用戶的需求,以及在XMPP的頂端建立如內容發布系統和基於地址的服務等應用程序。而且,XMPP包含了針對伺服器端的軟體協議,使之能與另一個進行通話,這使得開發者更容易建立客戶應用程序或給一個配好系統添加功能。
全稱:可擴野或扮展通訊和表示協議
簡介:可擴展通訊和表示協議 (XMPP) 可用於服務類實時通訊、表示和需求響應服務中的XML數據元流式傳輸。XMPP以Jabber協議為基礎,而Jabber是即時通訊中常用的開放式協議。XMPP is the IETF's formalization of the base XML streaming protocols for instant messaging and presence developed within the Jabber open-source community in 1999
XMPP(可擴展消息處理現場協議)是基於可擴展標記語言(XML)的協議,它用於即時消息(IM)以及在線現場探測。它在促進伺服器之間的准即時操作。這個協議可能最終允許網際網路用戶向網際網路上的其他任何人發送即時消息,即使其操頌灶作系統和瀏覽器不同。
XMPP的前身是Jabber,一個開源形式組織產生的網路即時通信協議。XMPP目前被IETF國際標准組織完成了標准化工作。標准化的核心結果分為兩部分;
核心的XML流傳輸協議
基於XMLFreeEIM流傳輸的即時通訊擴展應用
XMPP的核心XML流傳輸協議的定義使得XMPP能夠在一個比以往網路通信協議更規范的平台上。藉助於XML易於解析和閱讀的特性,使得XMPP的協議能夠非常漂亮。
XMPP的即時通訊擴展應用部分是根據IETF在這之前對即時通訊的一個抽象定義的,與其他業已得到廣泛使用的即時通訊協議,諸如AIM,QQ等有功能完整,完善等先進性。
XMPP的擴展協議Jingle使得其支持語音和視頻。
XMPP的官方文檔是RFC 3920.
XMPP中定義了三個角色,客戶端,伺服器,網關。通信能夠在這三者的任意兩個之間雙向發生。伺服器同時承擔了客戶端信息記錄,連接管理和信息的路由功能。網關承擔著與異構即時通信系統的互聯互通,異構系統可以包括SMS(簡訊),MSN,ICQ等。基本的網路形式是單客戶端通過TCP/IP連接到單伺服器,然後在之上傳輸XML。
傳輸的是與即時通訊相關的指令。在以前這些命令要麼用2進制的形式發送(比如QQ),要麼用純文本指令加空格加參數加換行符的方式發送(比如MSN)。而XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文本。
以文檔的觀點來看,客戶端或伺服器發送的所有XML文本連綴在一起,從<stream>到</stream>構成了一個完整的XML文檔。其中的stream標簽就是所謂的XML Stream。在<stream>與</stream>中間的那些<message>...</message>這樣的XML元素就是所謂的XML Stanza(XML節)。XMPP核心協議通信的基本模式就是先建立一個stream,然後協商一堆安全之類的東西,中間通信過程就是客戶端發送XML Stanza,一個接一個的。伺服器根據客戶端發送的信息以及程序的邏輯,發送XML Stanza給客戶端。但是這個過程並不是一問一答的,任何時候都有可能從團凱一方發信給另外一方。通信的最後階段是</stream>關閉流,關閉TCP/IP連接。
目前不少IM應用系統如:Google公司的Google Talk以及Jive Messenger等開源應用,都是遵循XMPP協議集而設計實現的,這些應用具有很好的互通性。
E. 如何實現消息推送功能
?可以用第三方軟體極光推送來實現。對於定製化需求較強的,或者想擁有自己推送平台的開發者,極光提供全功能的私有雲方案。極光推送快速開始步驟: 1、到極光推送官方網站注冊開發者帳號;
2、登錄進入管理控制台,創建應用程序,得到 Appkey(SDK 與伺服器端通過 Appkey 互相識別);
3、在推送設置中給 Android 設置包名、給 iOS 上傳證書、啟用 WinPhone,根據你的需求進行選擇;
4、下載 SDK 集成到 App 里。
客戶端初始化 JPush 成功後,JPush 服務端會分配一個 Registration ID,作為此設備的標識(同一個手機不同 App 的 Registration ID 是不同的)。開發者可以通過指定具體的 Registration ID 來進行對單一設備的推送。
F. 即時通訊IM總結
即時通信(Instant Message /IM)的含義
有許多的IM系統,如AOL、Yahoo IM、 MSN以及QQ,它們最大的區別在於各自通訊協議的實現,所以即時通訊技術的核心在於它的傳輸協議
協議用來說明信息在網路上如何傳輸,如果有了統一的傳輸協議,那麼應當可以實現各個IM之間的直接通訊,為了創建即時通訊的統一標准,目前已經出現過的IM協議包括:IETF的對話初始協議(SIP)和即時通訊對話初始協議和表示擴展協議(SIMPLE)、應用交換協議(APEX)、顯示和即時通訊協議(PRIM)及基於XML且開放的可擴展通訊和表銀寬示協議(XMPP)協議(常稱為 Jabber 協議)
XMPP
XMPPframeWork
配置MYSql伺服器
配置客戶端
XMPP的框架就是用的她 我們把TCP的Socket 叫做 流式 stream UDP 的socket 叫做 報文或報式 Socket
XMPP :Extensible Messaging and Presence Protocol,以Jabber協議(XMPP協議前身)為基礎 XMPP協議基於可擴展標記語言XML,建立TPC/IP連接,完成C/S、C/C、S/S之間的數據傳輸。XMPP是一個消息傳輸國際化標准協議。 XMPP官網:http://xmpp.org XMPP官方中文wiki:Jabber/XMPP中文翻譯計劃
XMPP是基於XML的協議,用於即時消息(IM)以及在線現場探測。最初,XMPP作為一個框架開發,目標是支持企業環境內的即時消息傳遞和聯機狀態應用程序。 XMPP前身是Jabber(1998年),是一個開源組織定義的網路即時通信協議
XMPP是一個分散型通信網路,這意味著,只要網路基礎設施允許,任何XMPP用戶都可以向其他任何XMPP用戶傳遞消息。多個XMPP伺服器也可以通過一個專門的「伺服器-伺服器」協議相互通信,提供了創建分散型社交網路和協作框架的可能性
XMPP基於XML協議的
XMPP客戶端使用coreData存儲,伺服器使用MYSql存儲。
框架初步認識Core核心庫XMPPStrem負責處理Socket流的連接斷開讀寫等XMPPElementDDXMLElement子類fromtoidXMPPJIDJabberID 對象,由 用戶名@本地域/資源類型 組成bare只包含用戶名和本地域的NSString,缺少資源類型full 完整的JID的NSString,包含資源類型XMPPMessage< message type = 「unkown」\>基礎消息XML對象。消息正文位於\\中type屬性一般有:normal,chat,groupChatXMPPPresence\出席XML對象
子節點: show(有固定的類型) status
type屬性一般有:available(上線 默認值),unavailable,subscribe,subscribed,unsubscribe,unsubscribed,probe等
XMPPIQ
信息/查散搏謹詢 XML對象
子節點: error
type屬性一般有: result,error,set,get等 XMPPMessage,XMPPIQ,XMPPMessage都是XMPPElement的子類
XMPPMole
可以理解為功能模塊的抽象類,基本上不可能直接實例化這個類
一些公有方法: active deactive等
擴展庫
XMPPReconnect,XMPPAutoPing ,XMPPRoster,沖基XMPPMessageArchiving,XMPPRoom,XMPPFileTransfer,XMPPVCardTemp,XMPPAvatar等附加功能模塊,基本上都是繼承XMPPMole
XMPPCoreDataStorage —CoreData存儲器抽象類,基本上上述模塊對應都有各自的實現
XMPPXXXXCoreDataStorageObject — 各個模塊中的託管對象
GCDAsyncSocket、GCDMulticastDelegate,DDLog,XCodeColors 等三方框架
Xcode插件失效解決辦法
1.打開xcode插件所在的目錄: /{當前用戶名}/ Library/Application\ Support/Developer/Shared/Xcode/Plug-ins
2.選擇已經安裝的插件例如VVDocument,右鍵點擊show package contents,
3.找到info.plist 文件,找到DVTPlugInCompatibilityUUIDs的項目,
4.添加C4A681B0-4A26-480E-93EC-1218098B9AA0(當前xcode的一個號碼),這個號碼怎麼得到? 在終端執行 defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID
5.再右鍵「打開包內容」雙擊contents\MacOS目錄下的一個黑色圖標,會打開終端窗口,最後列印「進程已完成」之類,
6.重啟xcode
開啟XCodeColors
配置DDLog顏色,開啟enable屬性
schema中添加環境變數 XcodeColors = YES
G. IM通信協議XMPP與SIP
目前出現的IM產品,其通信方式主要有兩種:
一種通信方式是把胡斗伺服器作為客戶端之間通信的媒介。
伺服器負責對整個網路進行監聽,每個客戶端啟動後,與伺服器的監聽埠進行連接,伺服器派生一個新的工作線程去處理此客戶端的請求,並負責將此客戶端的請求數據中轉到接收方。即客戶端之間的連接請求和通信數據均需要通過伺服器中轉。
這種方式便於對客戶端的數據進行流量分析和數據監控,但伺服器的性能很容易成為通信的瓶頸。
在線檢測即時消息傳遞。
另一中通信方式是客戶端間採用點對點的方式直接進行通信。
此時伺服器只負責協助客戶端之間建立點對點連接,客戶端直接建立連接後則直接進行點對點通信。
SIP協議,基於ip協議。一般用於建立語音和視頻通信。目前sip協議已經被制定得較為完善。
xmpp是一種基於xml的協議。不僅可以實現文本之拍雹間的傳遞,也具有靈活的擴展性從而方便地實現更復雜格式文件的即時傳遞。
目前基本所有的通用IM產品,通信雙方都是直接進行通信,而不必通過伺服器來中轉,造成對於用戶間數據的監管非常困難。如此,如何防止商業機密和其他非法信息的傳播也是一個重要的安全問題。
xmpp:基於xml很強擴展性,很強褲賀磨靈活性,很好開放性(源碼開放),易於實現持久連接,很好安全性。
應用
google 發布世界上首個開源的Html5 sip 客戶端
HTML5 SIP客戶端是一款開源的,完全利用JavaScript編寫的集社交(FaceBook,Twitter,Google+),在線游戲,電子商務等應用於一體。無擴展,無插件或是必備的網關,視頻堆棧技術依賴於WebRTC。如同主頁里的Demo視頻演示,你可以輕松實現Chrome和IOS/Android移動設備之間的實時視頻/音頻通話。
很適合硬體(內存和運算能力)受限的嵌入式系統使用。
Html5 sip 客戶端 新特性包括:
支持Audio / Video通話功能;
支持即時信息;
Presence;
呼叫保持/恢復;
顯示呼叫轉移;
支持多個賬號;
雙音多頻信號(DTMF)使用SIIP INFO
H. 基於xml的基本協議是
是XMPP的即時通訊指令的傳遞基礎,也是一個非常重要的可以被進一步利用的網路基礎協議。