iOS swift項目IM實現,從長鏈接到底層數據解析分析之Socketswift
一:項目簡介: 去年開始接手了一個國企移動項目,項目的需求是實現IM即時通信功能。安全
* 一期版本功能包括了:性能優化
1.公司業務的審批,報價和授標審批流程;服務器
2.單人的聊天和羣組聊天(領導平常工做交流);網絡
3.聊天消息包括支持文字類消息,語言,圖片,而且語言支持跨平臺;框架
4.對消息的網絡數據傳遞實現加密壓縮處理,保證數據安全傳輸;異步
* 項目特色:socket
由於項目業務的:審批,報價和授標審批流程的特殊性, IM的實現不能應用第三方,好比:極光推送等,因此須要實現處理Socket底層數據解刨。tcp
二:iOS IM功能使用Socket的tcp請求協議來實現,推薦使用第三方sdk: CocoaAsyncSocket性能
CocoaAsyncSocket:OC的版本,是應用GCD寫的異步處理,有興趣的能夠去看下原碼
三:CocoaAsyncSocket
pod 'CocoaAsyncSocket' //能夠經過pod集成
四:CocoaAsyncSocket init和delegate
----init分析------
----delegate分析------
* 實現CocoaAsyncSocket的4個代理來處理Socket通信數據,下面分別分析各個代理的做用:
1. - (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port;
2.- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(nullable NSError *)err;
* 有成功,那麼一定會有失敗:
更新的狀態包括:1: 網絡狀態,2: 用戶數據同步狀態,3: 心跳間隔時間,4: 是不是強制從新鏈接
注:(一個健壯的性能又好的IM系統,須要考慮的因素很重要)
注: 本項目總負責王總,是後臺出生,整個項目的後臺(報告EQ系統,ERP系統)系統都有王總搭建,後臺的整個IM框架也是王總集成,維護和改進,
國企職位高而且技術全面的確實佩服。
3.- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag;
4.- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag;
指令消息(syc指令),心跳消息,Init消息和Invoke(獲取)消息;
五:Socke總結
* CocoaAsyncSocket 的Socket 鏈接層到這裏差很少了,上面列出來的條例都是須要很是注意的地方。
* IM鏈接層還有個很是重要的地方:須要對項目的網絡狀態時時監控,網絡狀態的改變須要作處理,
4G網絡下須要對用戶提醒,虛擬網絡下須要優化處理IM任務, 在斷開鏈接重連的狀況下要優先判斷網絡狀態,
這些都是對IM系統的性能優化,爲項目的迭代打下堅韌的基礎。
注:下一篇: iOS swift項目IM實現,從長鏈接到數據流解析分析之Payload數據打包和解析。