一.通訊方式
im通訊方式有兩種選擇:裝置直連(p2p)和通過伺服器中轉。
1.p2p
p2p多見於區域網內聊天工具,典型的應用有:飛鴿傳書,天網maze等。這類軟體在啟動後一般做兩件事情:
進行udp廣播:傳送自己資訊和接受同區域網內其他端資訊
開啟tcp監聽:等待其他端進行連線
2.伺服器中轉
幾乎所有網際網路im產品都採用伺服器中轉這種方式進行訊息傳輸,相對於p2p的方式,它有如下的優點:
當然它也有自己的問題:伺服器架構複雜,併發要求高。
二.網路連線方式
im主流網路連線方式有兩種:
後者常見於web im系統(當然現在很多web im都是基於websocket實現),它的優點是實現簡單,方便開發上手,問題是流量大,伺服器負載較大,訊息及時性無法很好地保證,對大規模的使用者量支援不夠,比較適合小型的im系統,如乙個小**的客戶系統。
基於tcp長連線則夠更好地支援大批量使用者,問題是客戶端和伺服器的實現比較複雜。當然也還有一些變種,如下行使用mqtt進行伺服器通知/訊息的下發,上行使用http短連線進行指令和訊息的上傳。這種方式能夠保證下行訊息/指令的及時性,但是在弱網路下上行慢的問題還是比較嚴重。早期的來往就是基於這種方式。
三.協議選擇
im協議選擇原則一般是:易於拓展,方便覆蓋各種業務邏輯,同時又比較節約流量。後一點的需求在移動端im上尤其重要。
常見的協議有:
xmpp協議的優點在於:協議開源,可拓展性強,在各個端(包括伺服器)有各種語言的實現,開發者接入方便。但是缺點也是不少:xml表現力弱,有太多冗餘資訊,流量大,實際使用時有大量天坑。
mqtt的優點是協議簡單,流量少,但是它並不是乙個專門為im設計的協議,多使用於推送。
乙個好的協議需要滿足如下條件:高效,簡潔,可讀性好,節約流量,易於拓展,同時又能夠匹配當前團隊的技術堆疊。基於如上原則,我們可以推出: 如果團隊小,團隊技術在im上積累不夠可以考慮使用xmpp或者mqtt+http短連線的實現。反之可以考慮自己設計和實現私有協議。
上面就是乙個im系統大致的選型過程:通訊方式,連線方式,協議選擇,協議設計。
移動IM開發學習 3
在ubuntu系統上 xmpp環境搭建之mysql安裝 一.安裝mysql 資料庫也是伺服器,連線需要 位址 埠號 開啟終端 二.遠端訪問mysql資料庫 mysql遠端訪問的命令 mysql h192 168 1.11 uroot p123456出現這樣的錯誤 error 2003 hy000 c...
移動IM開發學習 5
遵守xmpp的客戶端 mac中的 資訊 也是遵守xmpp協議的 一.那麼如何在mac下的資訊中新增帳戶呢 1.首先在openfire的管理控制台中新增使用者 2.在mac資訊中新增剛才新增的賬戶 1 資訊 新增帳號 4 配置成功 二.如何為自己的電腦配置網域名稱 ubuntu 修改 etc host...
移動 IM 開發之心跳
什麼是心跳?在使用 tcp 長連線的im 服務設計中,往往都會涉及到心跳。心跳一般是指某端 絕大多數情況下是客戶端 每隔一定時間向對端傳送自定義指令,以判斷雙方是否存活,因其按照一定間隔傳送,類似於心跳,故被稱為心跳指令。為什麼要在應用層做心跳 那麼問題就隨之而來了 為什麼需要在應用層做心跳,難道 ...