iOS后台如何保持socket长连接和数据传输
来源:互联网 发布:openjdk8源码下载 编辑:程序博客网 时间:2024/05/22 04:52
工程中使用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:^{
- }];
- }
说明:通过1和2不容易通过苹果的审核,而且只能获取有限的后台时间,可以不开启1和2的情况下直接通过第三种方法来获取更多的后台时间来完成后台下载或者定时器方法。
我会在另外一篇博客详细讲述beginBackgroundTaskWithExpirationHandler方法的使用原理。
- 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长连接
- 带图标的input
- python时间操作
- ES分组聚合:计算每个tag下的商品数量且某个filed包含指定关键字,分组,平均,每个tags下的平均价格,排序,指定范围区间
- 记一次shell脚本入门编写
- RabbitMQ 网页端控制台开启方式
- iOS后台如何保持socket长连接和数据传输
- Centos安装Hadoop出错
- [Oracle 11g r2(11.2.0.4.0)]案例分析6-丢失磁盘心跳导致的集群重新配置
- 1.选题及计划,3天学会python
- Lucene
- 几款常用的Git 图形化工具
- 二分查找时间复杂度分析
- iOS修改textField的placeholder的字体颜色
- QT整理之HelloWorld测试例子