默認
打賞 發表評論 16
想開發IM:買成品怕坑?租第3方怕貴?找開源自已擼?盡量別走彎路了... 找站長給點建議
即時通訊框架MobileIMSDK:常見問題解答
閱讀(53051) | 評論(16 收藏3 淘帖1
學習交流↘
  • 常見問題討論學習:點此進入 推薦
  • 討論學習和資料區:點此進入
  • 移動端即時通訊交流群: 320837163 推薦
  • bug/建議發送至:[email protected]
  • 技術支持/合作/咨詢請聯系作者QQ:413980957

相關資料↘

開發文檔↘

資源下載↘

相關技術↘
  ① Web端即時通訊框架:MobileIMSDK-Web
  ② 移動端實時音視頻框架:RainbowAV
  ③ 全功能產品級IM案例:RainbowChat
  ④ Web端產品級IM案例:RainbowChat-Web

捐助作者,得MobileIMSDK精編注釋版 (精編源碼+算法圖+CHM版API)


請點擊需要的平臺和版本,前往淘寶下單,付款后系統會自動發貨(網盤下載鏈接)到您的相關郵件地址,詳情請見淘寶詳情:

MobileIMSDK(Android客戶端庫)精編注釋版:https://item.taobao.com/item.htm?id=534778878908
MobileIMSDK(Java客戶端庫)精編注釋版:https://item.taobao.com/item.htm?id=534874027509
MobileIMSDK(iOS客戶端庫)精編注釋版:https://item.taobao.com/item.htm?id=534918179776
MobileIMSDK(服務端庫)精編注釋版:https://item.taobao.com/item.htm?id=534986485062


即時通訊框架MobileIMSDK:常見問題解答_1.png       即時通訊框架MobileIMSDK:常見問題解答_2.png
即時通訊框架MobileIMSDK:常見問題解答_3.png       即時通訊框架MobileIMSDK:常見問題解答_4.png

(更多詳情請進入:http://www.uktmgv.tw/thread-411-1-1.html

問題1:MobileIMSDK到底是什么?有何價值?解決了哪些問題?


到底是什么?
純技術角度講:它是一整套基于UDP協議的客戶端A、服務端、客戶端B的3方全向即時通訊算法實現,超輕量級、高度提煉。
應用層角度講:它是一組包含了Android客戶端庫、iOS客戶端庫、Java跨平臺客戶端庫和服務端庫的即時通訊SDK框架集。
更通俗一點講:它是一個專為移動設備設計的跨設備、跨平臺、跨網絡的即時通訊開發框架,可用于(包含但不限于)開發聊天APP、企業OA、消息推送應用等。

  有何價值?
有過即時通訊應用開發經驗的人都有體會,即時通訊應用開發的難點不僅在于應用層的業務邏輯實現,更重的要是需要穩定、可靠、對應用層友好的即時通訊核心層框架,否則應用層的復雜邏輯再摻雜進即時通訊通信技術本身的復雜性(在無線網絡普及的時代,問題更為突出),會讓經驗不足的開發團隊陷入混亂。MobileIMSDK的價值在于:讓開發者專注于應用邏輯的開發,底層復雜的即時通訊算法交由SDK開發人員,從而解偶即時通訊應用開發的復雜性

  解決了哪些問題?

  • UDP協議實現,更符合現今的復雜移動端網絡通信環境;
  • 完善的QoS消息送達保證機制,解決了UDP通信時的消息黑洞問題;
  • 解決了高延遲網絡環境下的2G、3G、4G、WiFi以及傳統寬帶的多端、多網混合通信可靠性和穩定性問題;
  • 擁有通信自動治愈算法,無論無線信號多么惡劣,只要恢復通信,將自動實現連接自我修復;
  • 預定義多種耗電模式,在應對不同通信場景的情況下,自主決定電量、網絡流量的消耗等;
  • 易拆裝的協議封裝,可針對不同應用場景,選擇適合的協議壓縮方案;
  • 歷經多個版本的錘煉,API高度封裝,在解決應用層與即時通訊層代碼偶合的同時,能適應更多應用場景。

有關MobileIMSDK的更多介紹,請見《即時通訊框架MobileIMSDK:快速入門》。

問題2:類似于MobileIMSDK的框架好開發嗎,有何難度?

老實講,想要開發出穩定可靠且可用于生產環境的完整算法,并不容易,比較明顯的難點如下所述。


難點算法偶合性大、整合有難度
算法本身并無開創性,但雜合無線網絡的復雜性(不同制式、易受干擾等)、跨設備、跨平臺、跨網絡類型的混合通信, 這些要素和條件下,要實現的算法偶合性較大,加大了整合的難度。

難點算法需多平臺無差別精確實現、人員配備省不了
因需要支持不同平臺、多種要素和條件,要實現的算法不可謂不吹毛求疵,要求不算太高,但顯然沒有些許功底是不太容易搞定的,所以人員配備是個問題。

難點框架的提煉和把握需精準、對上層友好是關鍵
能較高質量地實現所謂“框架”的價值已然超越了算法本身,否則再牛逼的東西也只能孤芳自賞,所以對上層友好也很關鍵,簡單的代碼堆砌顯然不可能達到目的。

難點④:時間上很難一蹴而就
在眾多要素和條件存在的前提下,未經長期的測試和針對性調優,很難滿足實際應用的品質要求,時間上也是省不了的。

問題3:使用MobileIMSDK時如何獲得幫助?


問題4:MobileIMSDK定義了具體的聊天APP協議嗎?


沒有。MobileIMSDK有明確的設計目標:即實現一個“專為移動端開發,可應用于跨設備的聊天APP、企業OA、消息推送等各種場景的高可重用即時通訊框架。”,所以為了提升MobileIMSDK的可重用性和靈活性,設計之初就特別回避了這一點。

這么設計帶來的好處是,比如當MobileIMSDK應用于企業OA時,因傳統企業應用系統中,通常都有自已的用戶關系管理模型和實現,因而只需要將MobileIMSDK作為即時通訊消息路由子系統來使用即可,這樣的場景下事情本來就該這么簡單。

當然,您可以自已定義您的聊天APP協議細節,這也意味著您在開發時能擁有更高的靈活性。一個典型的基于MobileIMSDK的全功能聊天應用APP案例:點此查看和試用

基于MobileIMSDK來開發更多IM等具體的業務邏輯,請見以下討論貼:
[已回復] 關于如何MobileIMSDK的Server端實現群組功能?
[已回復] MobileIMSDK的群聊、語音、視頻、文件傳輸考慮加這些功能么?
[已回復] 請教基于MobileIMSDK的群聊該如何實現?
[已回復] 用MobileIMSDK怎么實現群聊天
[已回復] MobileIMSDK實現討論組或者群聊的思路如何實現?
[已回復] 請教MobileIMSDK一對多群發、一對一單發消息的實現
[已回復] MobileIMSDK v3.0 的Web版與APP版群聊的問題
[已回復] MobileIMSDK服務端的多設備登陸互踢問題求助
[已解決] MobileIMSDK 退出登錄后再重新登錄的問題
[已解決] 基于MobileIMSDK寫IM之添加好友功能實現的疑問
[已回復] MobileIMSDK開發音視頻即時通訊、圖片消息的疑問
[已回復] MobileIMSDK如何實現圖片、語音留言信息的發送?
[已回復] MobileIMSDK里未讀消息、已讀消息的顯示如何實現?
>> 更多討論貼點此進入...

問題5:MobileIMSDK為何是基于UDP協議實現?有何好處?


眾所周之,因為UDP協議的無連接特性,比較明顯的好處有以下兩點。

好處同等服務器軟硬件條件下的更高效費比
相比TCP協議,因UDP協議的無連接特性,可靈活調整即時通訊算法,從而達成在有限的軟硬件條件下能支持更多的同時在線數。

好處非常適合于網絡延遲較大、網絡環境復雜的場景
某款基于MobileIMSDK的應用(點此查看它的非敏感運營數據)曾運營于高延遲、復雜的跨國、跨洲際網絡環境下(統計表明,此應用的典型網絡環境里訪問一個http應用的單向網絡平均延遲高達300ms以上,而同時段訪問國內的主流門戶延遲約為30ms左右),應用仍能正常保持較好的用戶體驗。這也一定程度證明了MobileIMSDK在此場景下的穩定性和可靠性。但假設此種情況下使用TCP協議,則協議層丟包和重傳情況會非常多,根據TCP協議的重傳算法指數退避原則,在某些情況下,因此而帶來的用戶體驗災難是無法控制的。

相關文章僅供參考:


問題6:MobileIMSDK支持集群嗎?


MobileIMSDK暫不支持集群(后緒版本有支持集群的計劃)。理論上,MobileIMSDK應用于聊天APP時單機可負載的同時在線數可數十萬,應用于推送場景下可達千萬級別,如果您的應用能達到這樣的負載極限,總用戶數至少是百萬甚至千萬級別,相信一切技術問題都不再會是問題了。無論如何,任何同類技術的單機容量都會有頸,為了更高的負載和更好的伸縮性,大型應用里集群當然是必須的選擇。MobileIMSDK的壓力測試報告:點此查看

MobileIMSDK已有集群開發計劃,未來版本中會加入。

問題7:MobileIMSDK支持TCP協議嗎?


目前不支持。MobileIMSDK設計之初,充分考慮了移動互聯網的網絡復雜性和不可靠特性,最終選擇以UDP協議實現之,目前還沒有特別需要支持TCP協議的理由出現,當然如您有好的建議和想法,歡迎交流和討論。

MobileIMSDK已有TCP版開發計劃,未來版本中會加入。

問題8:MobileIMSDK支持同一用戶名的多設備登陸嗎?


理論上MobileIMSDK的通訊不依賴于用戶名(服務端會為每一個登陸的客戶端分配一個唯一ID),因而同一用戶名在不同客戶端登陸時,通訊不受影響,但具體實現還依賴于應用層是如果處理的。

相關討論帖子請見:
[已回復] MobileIMSDK 3.0版 同一賬號多處登錄,業務邏輯如何處理?
[已回復] MobileIMSDK服務端的多設備登陸互踢問題求助
>> 更多討論貼點此進入...

問題9:客戶端后臺有心跳機制嗎?為何需要心跳機制?


MobileIMSDK的客戶端后臺有健壯的心跳機制,使用心跳機制的主要目的有3個。

目的刷新NAT路由的UDP端口老化時間
典型情況下廠商的NAT路由算法中UDP的端口老化時間約為300秒(當然,具體數值由無線ISP或您的家用路由器廠商定義,很多情況下此時間可能會更短),如果沒有心跳機制,則您的客戶端將會因UDP端口老化而再也收不到消息。這顯然不是MobileIMSDK的問題,它是由網關設備的NAT路由算法所決定。

目的告訴服務端您的客戶端還“活著”
因為UDP的無連接特性,心跳機制對于刷新服務端的在線列表是直接而有效的方案。

目的讓客戶端知道自已是否還處于“正常通信”狀態
導致客戶端與服務端無法通信的因素有很多,很難用有限且簡單的代碼來判斷之。舉個例子:當您的手機正常連接于您的家庭WiFi時,WiFi連接是正常的,但此時您的寬帶由于欠費或其它原因根本就無法上網,此時如果沒有心跳機制,您的APP會認為網絡正常,但卻無法完成數據的收發,因為根本就上不了網。

相關技術文章請見:
Android端消息推送總結:實現原理、心跳保活、遇到的問題等
為何基于TCP協議的移動端IM仍然需要心跳保活機制?
移動端IM實踐:實現Android版微信的智能心跳機制
移動端IM實踐:WhatsApp、Line、微信的心跳策略分析
>> 更多同類文章 ……

問題10:MobileIMSDK如何支持手機號、賬號等多種登陸方式?


請見討論貼《[已回復] 對接MobileIMSDK的登錄邏輯問題,如果同時手機號和賬號登錄?》。

問題11:MobileIMSDK客戶端退出登陸(或切換賬號)后無法再次登陸?


請見討論貼《[已解決] MobileIMSDK的安卓版退出后(不退出APP)無法再次登錄的問題》,及貼內回復內容。

問題12:MobileIMSDK服務端如何主動推送給客戶端?


請見討論貼《[已解決] MobileIMSDK服務端主動推送消息至Android客戶端該怎么實現?》,及貼內回復內容。

問題13:MobileIMSDK服務端內網運行正常,但部署到外網后無法連接?


請見討論貼:
[已解決] MobileIMSDK服務端部署在阿里云上客戶端連接不成功的問題
[已回復] 公網上的Windows 2008部署MobileIMSDK后客戶端不能連接
及貼內回復內容。

問題14:MobileIMSDK有消息最大字節數限制?


MobileIMSDK是基于UDP實現的,因為UDP是基于“包”的概念,所以長度肯定不是無限的。

具體的理論,你可以參考以下兩篇文章:
UDP中一個包的大小最大能多大
不為人知的網絡編程(六):深入地理解UDP協議并用好它

如果你考慮到的是你的移動端IM里要發送大文本的情況,你可以看看這個帖子里的討論:
[已回復] MobileIMSDK的消息有大小限制嗎?

問題15:MobileIMSDK服務端如何部署?


請見開發者文檔《即時通訊框架MobileIMSDK的Demo使用幫助:Server端》。

問題16:MobileIMSDK的v2和v3有什么致命區別?


請見討論貼《[已回復] MobileIMSDK的v2和v3有什么致命區別?客戶端可以不修改直接從v2升級到v3嗎?》,及貼內回復內容。

問題17:MobileIMSDK中如何處理離線消息?


請見討論貼《[已回復] 求教MobileIMSDK中IM離線消息處理方法》,及貼內回復內容。

問題18:MobileIMSDK服務端onTransBuffer回調具體都怎么用?


請見討論貼《[已解決] MobileIMSDK服務端onTransBuffer回調具體都怎么用?》,及貼內回復內容。

問題19:MobileIMSDK中UDP是如何保證消息不丟失?


請見以下討論貼及貼內回復內容:
[已解決] MobileIMSDK中的心跳發起順序和送達保證機制
[已回復] 關于MobileIMSDK中UDP如何保證消息不丟失問題

問題20:MobileIMSDK 淘寶下單精編版本后,以后怎么獲取更新?


請見討論貼《[已回復] MobileIMSDK 商業版本怎么獲取更新?》,及貼內回復內容。

問題21:MobileIMSDK如何實現踢掉一個登錄用戶?


請見討論貼《[已回復] 請問MobileIMSDK如何踢掉一個登錄用戶》,及貼內回復內容。

問題22:如何將MobileIMSDK集成到web項目里?


請見討論貼《[已解決] 請教如何將MobileIMSDK集成到web項目里,作為服務器使用?》,及貼內回復內容。

問題23:MobileIMSDK有Web版嗎?


MobileIMSDK的Web版已獨立為MobileIMSDK-Web工程,且2者協議完全兼容,可無縫互通,詳見:《輕量級Web端即時通訊框架:MobileIMSDK-Web基本介紹》。

問題24:如何使用MobileIMSDK開發消息推送系統?


請見討論貼《[已回復] 如何使用MobileIMSDK開發消息推送系統?》,及貼內回復內容。

問題25:MobileIMSDK中的AppKey有何作用?需要獲取AppKey?


請見討論貼《[已解決] 請問下MobileIMSDK服務端的appKey是怎么獲取的?》,及貼內回復內容。

問題26:MobileIMSDK的udp壓力測試無法達到單機上限的問題?


請見討論貼《[已解決] MobileIMSDK的udp壓力測試無法達到單機上限的問題》,及貼內回復內容。

問題27:MobileIMSDK與其他推送框架的互通問題?


請見討論貼《[已回復] 關于MobileIMSDK與其他推送框架的互通問題》,及貼內回復內容。

問題28:MobileIMSDK支持Netty版嗎?


MobileIMSDK 以在v3.1版中提供了基于Netty的MobileIMSDK服務端庫,Netty首版發布于2017年12月14日。
您可前往Github下載最新版:https://github.com/JackJiang2011/MobileIMSDK

附錄:更多MobileIMSDK討論帖


請見:http://www.uktmgv.tw/forum.php?mod=collection&action=view&ctid=2

即時通訊網 - 即時通訊開發者社區! 來源: - 即時通訊開發者社區!

上一篇:即時通訊框架MobileIMSDK的開發指南:Java客戶端下一篇:即時通訊框架MobileIMSDK的開發指南:Android客戶端

本帖已收錄至以下技術專輯

推薦方案
評論 16
請問是否支持wbe通信?
引用:lixiang1987 發表于 2016-07-04 22:30
請問是否支持wbe通信?

你說的是“是否支持Web端吧”?
目前MobileIMSDK不支持Web端,自已去寫的話也不是難事,再說MobileIMSDK這種c/s技術框架跟Web版即時通訊本來就是分開的兩碼事呢,你可以獨立寫好后建立橋接通信就可以互聯了。
簽名: 《主流移動端賬號登錄方式的原理及設計思路》http://www.uktmgv.tw/thread-2863-1-1.html
請問有沒有MobileIMSDK架構的介紹?
安卓心跳包中,30s以上就頻繁斷開,10s會偶爾斷開,3s就比較穩定了。但是根據樓主所說,不是說NAT表的清除時間有的都到好幾分鐘嗎,為什么安卓10s就很容易斷開連接呢?還要就是3s的心跳時間,會不會有點太頻繁了,這樣手機電量消耗會很大吧?
引用:jituijiaqiezi 發表于 2017-04-06 18:12
安卓心跳包中,30s以上就頻繁斷開,10s會偶爾斷開,3s就比較穩定了。但是根據樓主所說,不是說NAT表的清除 ...

NAT路由端口老化是程序無法解決的,能解決的就是減小流量消耗以及其它策略
簽名: 《主流移動端賬號登錄方式的原理及設計思路》http://www.uktmgv.tw/thread-2863-1-1.html
在源碼中的安卓庫中,ClientCoreSDK中的檢測網路的廣播接受器networkConnectionStatusBroadcastReceiver中,當檢測到網絡已連接上時,調用的應該是LocalUDPSocketProvider.resetLocalUDPSocket而不是closeLocalUDPSocket吧?
引用:jituijiaqiezi 發表于 2017-04-10 11:29
在源碼中的安卓庫中,ClientCoreSDK中的檢測網路的廣播接受器networkConnectionStatusBroadcastReceiver中 ...

理論上,調這兩個方法中的任一個都可以,你理解下代碼就明白了,關鍵是只要getLocalUDPSocket()能拿到干凈的socket就行了。
簽名: 《主流移動端賬號登錄方式的原理及設計思路》http://www.uktmgv.tw/thread-2863-1-1.html
引用:JackJiang 發表于 2017-04-10 12:49
理論上,調這兩個方法中的任一個都可以,你理解下代碼就明白了,關鍵是只要getLocalUDPSocket()能拿到干 ...

懂了,謝謝
想問問樓主對于推送和即時通信有什么區別呢?我怎么感覺都是維持長連接進行消息的發送呢?
引用:jituijiaqiezi 發表于 2017-04-10 17:04
想問問樓主對于推送和即時通信有什么區別呢?我怎么感覺都是維持長連接進行消息的發送呢?

本來就是啊
簽名: 《主流移動端賬號登錄方式的原理及設計思路》http://www.uktmgv.tw/thread-2863-1-1.html
引用:JackJiang 發表于 2017-04-10 19:41
本來就是啊

這樣啊,應該沒有應用是自己本身有了即時通訊,又去搞一個推送的吧
引用:jituijiaqiezi 發表于 2017-04-10 20:14
這樣啊,應該沒有應用是自己本身有了即時通訊,又去搞一個推送的吧

沒有那必要
簽名: 《主流移動端賬號登錄方式的原理及設計思路》http://www.uktmgv.tw/thread-2863-1-1.html
引用:JackJiang 發表于 2017-04-10 20:15
沒有那必要

好的,3q
    請問mobileIMSDK中的心跳機制是采用哪種方式?是客戶端定時請求的方式嗎?
引用:fuzhongwangcs 發表于 2017-07-26 14:07
請問mobileIMSDK中的心跳機制是采用哪種方式?是客戶端定時請求的方式嗎?

你看看這個帖子能否解決你的疑問:http://www.uktmgv.tw/thread-129-1-1.html
簽名: 《主流移動端賬號登錄方式的原理及設計思路》http://www.uktmgv.tw/thread-2863-1-1.html
3Q
簽名: 心情好
打賞樓主 ×
使用微信打賞! 使用支付寶打賞!

返回頂部
曾氏料二肖中特