iOS 後台保持長串連

來源:互聯網
上載者:User

標籤:

工程中使用tcp長串連來和服務端進行資料轉送,在IOS平台上,由於蘋果的後台機制,會有以下問題:

當程式退到背景時候,所有線程被掛起,系統會回收所有的socket資源,那麼socket串連就會被關閉,因此無法再進行資料的傳輸:

 

解決方案:

通過設定以下屬性可以保持socket串連和資料的繼續傳輸

1.需要在Info.plist檔案中添加UIBackgroundModes中的VOIP索引值;

2.設定流屬性

CFReadStreamRef和CFWriteStreamRef通過如下方法設定kCFStreamNetworkServiceType屬性為kCFStreamNetworkServiceTypeVoIP;

 

CFReadStreamSetProperty(theReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

CFWriteStreamSetProperty(theWriteStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

 

NSInputStream 和NSOutputStream通過如下方法設定NSStreamNetworkServiceType屬性為NSStreamNetworkServiceTypeVoIP;

 

[self.stream setProperty: NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType];

 

3.這裡有一個問題,就是用戶端是通過心跳來和服務端保持串連,心跳是由定時器觸發的,當我退到後台以後,定時器方法被掛起,那麼通過如下設定來在後台運行定時器

 

 1 - (void)applicationDidEnterBackground:(UIApplication *)application{ 2   3     UIApplication*   app = [UIApplication sharedApplication]; 4     __block    UIBackgroundTaskIdentifier bgTask; 5     bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 6         dispatch_async(dispatch_get_main_queue(), ^{ 7             if (bgTask != UIBackgroundTaskInvalid) 8             { 9                 bgTask = UIBackgroundTaskInvalid;10             }11         });12     }];13     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{14         dispatch_async(dispatch_get_main_queue(), ^{15             if (bgTask != UIBackgroundTaskInvalid)16             {17                 bgTask = UIBackgroundTaskInvalid;18             }19         });20     });21 }

 

iOS 後台保持長串連

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.