iOS后台如何保持socket长连接和数据传输
来源:互联网 发布:故宫淘宝h5 编辑:程序博客网 时间:2024/05/01 13:00
iOS后台如何保持socket长连接和数据传输
工程中使用tcp长连接来和服务端进行数据传输,在IOS平台上,由于苹果的后台机制,会有以下问题:
当程序退到后台的时候,所有线程被挂起,系统会回收所有的socket资源,那么socket连接就会被关闭,因此无法再进行数据的传输:
解决方法:
通过设置以下属性可以保持socket连接和数据的继续传输
1.需要在Info.plist文件中添加UIBackgroundModes中的VOIP键值;
2.设置流属性
CFReadStreamRef和CFWriteStreamRef通过如下方法设置kCFStreamNetworkServiceType属性为kCFStreamNetworkServiceTypeVoIP;
CFReadStreamSetProperty(theReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
CFWriteStreamSetProperty(theWriteStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
[self.stream setProperty: NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType];
3.这里有一个问题,就是客户端是通过心跳来和服务端保持连接,心跳是由定时器触发的,当我退到后台以后,定时器方法被挂起,那么通过如下设置来在后台运行定时器
- (void)applicationDidEnterBackground:(UIApplication *)application{ UIApplication* app = [UIApplication sharedApplication]; __block UIBackgroundTaskIdentifier bgTask; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid) { bgTask = UIBackgroundTaskInvalid; } }); }]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid) { bgTask = UIBackgroundTaskInvalid; } }); });}
0 0
- iOS后台如何保持socket长连接和数据传输
- iOS后台如何保持socket长连接和数据传输
- iOS后台如何保持socket长连接和数据传输
- iOS后台如何保持socket长连接和数据传输
- iOS后台如何保持socket长连接和数据传输
- iOS后台如何保持socket长连接和数据传输
- iOS后台如何保持socket长连接和数据传输
- iOS后台如何保持socket长连接和数据传输
- iOS后台如何保持socket长连接和数据传输
- iOS voip 后台保持长连接
- iOS之实现后台socket长连接
- java socket保持长连接
- voip socket 后台长连接
- socket保持长连接的讨论
- Socket心跳包保持长连接
- java-socket编程_ 2.socket保持长连接
- iOS后台保持连接,使用VOIP Socket方式,上传App Store会被拒绝么?
- 如何保证socket长连接
- java多线程的一些感悟
- 技术团队的情绪与效率
- ex_unitTest.py
- 画二叉树 java实现
- 数据库学习笔记(五)
- iOS后台如何保持socket长连接和数据传输
- 数学之美番外篇:平凡而又神奇的贝叶斯方法
- 配置HTTP访问SQL Server 2005 Analysis服务器
- Ubunt10.10更新源
- Git 的origin和master分析
- 服务器架构(收藏)
- IntelliJ IDEA: 字体美化和字体添加
- 提示并返回
- 老婆怀孕了,这个宝贝真心不错!