iOS swift項目IM實現,從長串連到資料流解析分析之Socket

來源:互聯網
上載者:User

iOS  swift項目IM實現,從長串連到底層資料解析分析之Socket

一:項目簡介:  去年開始接手了一個國企移動項目,項目的需求是實現IM即時通訊功能。

      * 一期版本功能包括了:

      1.公司業務的審批,報價和授標審批次程序;

      2.單人的聊天和群組對話(領導日常工作交流);

      3.聊天訊息包括支援文字類訊息,語言,圖片,並且語言支援跨平台;

      4.對訊息的網路資料傳遞實現加密壓縮處理,保證資料安全傳輸;

      * 項目特點:

        因為項目業務的:審批,報價和授標審批次程序的特殊性, IM的實現不能應用第三方,比如:極光推送等,所以需要實現處理Socket底層資料解刨。

 

二: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;

     *  有成功,那麼必定會有失敗:

  • 失敗需要即時更新串連狀態,確保使用者在串連失敗的情況下,操作的安全性(不閃退),加以UI提示

        更新的狀態包括:1:  網路狀態,2:  使用者資料同步狀態,3:  心跳間隔時間,4: 是否是強制重新串連

        註:(一個健壯的效能又好的IM系統,需要考慮的因素很重要)

 

  • 重新串連,在本項目總負責王總的建議下,一旦中斷連線給予6次重連機會

      註: 本項目總負責王總,是後台出生,整個項目的後台(報告EQ系統,ERP系統)系統都有王總搭建,背景整個IM架構也是王總整合,維護和改進,

             國企職位高並且技術全面的確實佩服。

           

 

  3.- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag;

  • GCDAsyncSocket資料包發送,涉及了3種狀態,分析如下:
  • 第一種:資料包只有發送,沒有回調資料包接受
    第二種:資料包有發送, 確定有資料包接受
    第三種:資料包有發送,不確定有資料包接受
  • 分析:GCDAsyncSocket資料包的接收需要提前訂閱(提供線程任務處理),如果提供的訂閱任務用完了,那麼GCDAsyncSocket 不會處理和回調新接收到的訊息資料,didWriteData這個方法的實現就是處理相容涉及的3種狀態,保證新訊息能被及時處理。

        

 

  4.- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag;

  • 新訊息成功訂閱,這裡就開始對資料的解析,資料類型分為:

        指令訊息(syc指令),心跳訊息,Init訊息和Invoke(擷取)訊息;

  • didReadData:方法中回調了tag欄位,但是我們不能按照tag來區分,tag只是回調線程的標記,必須安照資料類型來區分

        

 

五:Socke總結

      * CocoaAsyncSocket 的Socket 串連層到這裡差不多了,上面列出來的條例都是需要非常注意的地方。

      * IM串連層還有個非常重要的地方:需要對項目的網路狀態時時監控,網路狀態的改變需要做處理,

        4G網路下需要對使用者提醒,虛擬網路下需要最佳化處理IM任務, 在中斷連線重連的情況下要優先判斷網路狀態,

        這些都是對IM系統的效能最佳化,為項目的迭代打下堅韌的基礎。

       

        註:下一篇: iOS  swift項目IM實現,從長串連到資料流解析分析之Payload資料打包和解析。

        

        

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.