前言

GitHub

  • http请求:

每次更新数据都要向对应的端口发送一次请求,之后返回数据之后关闭连接

  • 长连接

客户端和服务器一直连着,当有数据更新的时候,服务器会直接发给客户端,不需要客户端主动请求。(client 需要监听流的输入)

ps:在这过程中,为了保证服务端和客户端一直是连接状态,客户端会定时不间断的发送心跳数据到服务器,表明还连接着,不然长时间没有数据更新,会断开连接,这样一直有心跳数据的时候,就会保证了连接没有中断,至于心跳数据的内容,就是前端后端共同商量的,和请求的数据是单独的。(通常采用nstimer)

一、tweak 项目集成CocoaAsyncSocket 可采用MonkeyDev 的logos Tweak模版(支持使用CocoaPods)

  • pod
platform :ios, '8.0'
inhibit_all_warnings!#use_frameworks!
target 'wlentrust' dopod 'CocoaAsyncSocket'pod 'JSONModel', '1.1.0'pod 'AFNetworking', '3.0.4'pod 'XMLDictionary'
end

由于tweak本身就是动态库,因此暂时只支持静态库#use_frameworks!

具体的请看MokeyDev 的logos tweak工程使用注意事项

二、问题解决

  • Cannot synthesize weak property in file using manual reference
    counting
/Users/devzkn/code/tweak/wlentrust/wlentrust/src/socket/GCDAsyncSocketManager/Manager/GCDAsyncSocketCommunicationManager.m:41:1: Cannot synthesize weak property in file using manual reference counting
  • 解决方案:修改项目配置为ARC编译环境
修改app LLVMXX -language-Object-C 支持ARC
Y-Y-Y-NO

三、代码实现

参考

读消息的设置

默认读消息为timeout 可以设置10

- (void)socketWriteData:(NSString *)data {// 开始写数据NSLog(@"socketWriteData:%@",data);NSData *requestData = [data dataUsingEncoding:NSUTF8StringEncoding];[self.socket writeData:requestData withTimeout:-1 tag:0];
//    [self socketBeginReadData];// 修改为连接建立之后  就立马监听
}

如果想要实时监听服务端的消息推送就可以修改,连接一旦建立 就开始读

- (void)socket:(GCDAsyncSocket *)socket didConnectToHost:(NSString *)host port:(UInt16)port {[self.socketManager socketBeginReadData];// 修改为连接建立之后  就立马监听}
/**开始读数据*/
#pragma mark - ******** 设置读数据的timeout   连接建立之后就开始监听读取数据- (void)socketBeginReadData {NSLog(@"socketBeginReadData");[self.socket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 maxLength:0 tag:0];//考虑使用-1
}

业务逻辑的处理

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {// 根据服务端返回的消息类型,解析参数,处理任务
}

实现实时监听服务端的流的方法

一旦接受到数据 就开启下一次的监听输入流
receive data -》socketBeginReadData

区分 服务端主动推送 和服务端响应的方式

可以让服务端新增响应类型 进行区分,或者app 端进行判断响应数据是否包含reqId,这个reqId 是只有app 主动发起的请求响应时才会存在

处理服务端的消息推送

GACRESPONSE_TYPE respType = [json[@"respType"] integerValue];if(respType == RESPONSE_TYPE_NOTIFY){//消息通知 服务端的主动通知//直接发送通知//   1、 RESPONSE_TYPE_NOTIFY 处理服务端主动推送的任务NSMutableDictionary * userInfo = [NSMutableDictionary dictionaryWithObject:json forKey:kRESPONSE_TYPENotificationjsonKey];//respType 传送json[[NSNotificationCenter defaultCenter] postNotificationName:kRESPONSE_TYPERESPONSE_TYPE_NOTIFYNotification object:self userInfo:userInfo];}else{//2、执行对应的blockSocketDidReadBlock didReadBlock = self.requestsMap[requestID];//    if (errorCode != 0) {////        jsonError = [[NSError alloc]initWithDomain:NSURLErrorDomain code:errorCode userInfo:nil];//    }if (didReadBlock) {didReadBlock(jsonError, json);}}[self.socketManager socketBeginReadData];// 修改为连接建立之后  就立马监听

异常断开连接处理


#pragma mark - ******** 失败重新连接
- (void)socketDidDisconnect:(GCDAsyncSocket *)socket withError:(NSError *)err {
- (void)socketWriteDataWithRequestType:(GACRequestType)typerequestBody:(nonnull NSDictionary *)bodycompletion:(nullable SocketDidReadBlock)callback {NSLog(@"socketWriteData:%@",body);if (self.socketManager.connectStatus == -1) {NSLog(@"socket 未连通");
- (void)socket:(GCDAsyncSocket *)socket didConnectToHost:(NSString *)host port:(UInt16)port {self.socketManager.connectStatus = 1;//此处的状态设置,提前到建立连接的地方//此时将重连的时钟删除[self.socketManager invalidatereconnectTimer];

服务端的搭建可以采用Node.js

API大全
PHP API

待续

工程师必备技能 - 90分钟自己开发一个chrome扩展

tweak 项目 快速搭建CocoaAsyncSocket(建连、断开、重连、心跳、通用请求)相关推荐

  1. Windows之vue-cli安装和vue项目快速搭建

    Windows之vue-cli安装和vue项目快速搭建 1.提前安装好node.js, 安装步骤:https://blog.csdn.net/qq_43842093/article/details/1 ...

  2. 「Vue 学习笔记 1」Vue 项目快速搭建,初始项目各个文件夹作用介绍和启动代码执行流程分析

    「Vue 学习笔记 1」Vue 项目快速搭建,初始项目各个文件夹作用介绍和启动代码执行流程分析 前言 一.我的开发环境 二.使用 Vue CLI (Vue 脚手架)快速搭建项目 三.初始项目的目录结构 ...

  3. Flutter项目快速搭建指南

    本文字数:8683字 预计阅读时间:30 分钟 前言: 笔者在这之前已经有一年时间没有接触过flutter项目的开发了,目前由于新项目的需要,要重新开始搭建一个flutter项目.让我感到惊讶的是,f ...

  4. SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【后端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】

    前后端分离项目快速搭建[后端篇] 数据库准备 后端搭建 1.快速创建个SpringBoot项目 2.引入依赖 3.编写代码快速生成代码 4.运行代码生成器生成代码 5.编写application.pr ...

  5. SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【前端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】

    前后端分离项目快速搭建[前端篇] 后端篇 前端篇 创建vue项目 安装所需工具 开始编码 1.在根目录下添加vue.config.js文件 2.编写main.js 3.编写App.vue 4.编写ax ...

  6. 搭建项目-快速搭建电商平台后台管理系统及逆向生成微服务基本功能

    1 快速搭建电商平台后台管理系统 目前在Gitee开源软件中,人人开源和若依关注度比较高,优品电商平台后台系统采用人人开源的框架来快速构建,完成基本的CRUD,开发更加关注复杂业务.高并发.高可用以及 ...

  7. 【SpringMVC】SpringMVC基础-SpringMVC项目快速搭建、日志框架为logback

    转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 分析 Spring MVC提供了一个DispatcherServlet来开发Web应 ...

  8. springcloud 创建子父项目_idea搭建springCloud----搭建父子项目(二)

    今天介绍一下 : idea 搭建父子项目 父项目:springCloud_ht 子项目:eureka_server(注册中心) 1-1.新建父项目: 1-2 起名称 springCloud_ht 1- ...

  9. Spring Boot项目快速搭建

    实验要求及目的: (1)掌握ApplicationContext容器使用属性setter方法注入的实现: (2)了解Spring的概念和优点: (3)熟悉Spring中的IOC和DI: 实验环境:   ...

最新文章

  1. 2022-2028年中国轻型输送带行业市场发展规模及市场分析预测报告
  2. JavaScript中window.open用法实例详解
  3. 【项目管理】RUP内容整理
  4. URLConnection和HttpURLConnection类
  5. laravel-admin form中的switch控件 不改变状态提交后值为0
  6. hnu暑期实训之487-3279 字符串处理
  7. 【禁忌搜索】基于禁忌搜索算法实现经典VRP问题的matlab仿真
  8. android后台定时执行任务,后台执行的定时任务
  9. 计算机屏幕颜色变黄色,win10系统电脑屏幕颜色偏黄如何调节
  10. TensorFlow Serving
  11. cesium添加填充_项目中的一个关于cesium的边界线的问题
  12. 论文笔记:HIE-SQL:History Information Enhanced Network for Context-Dependent Text-to-SQL Semantic Parsing
  13. 徐直军、何小鹏等大咖加盟,2021互联网岳麓峰会即将重磅开幕
  14. html5 文字滑动效果,jQuery滑动文字特效
  15. 数论:欧几里得与扩展欧几里得算法
  16. 数据结构之二叉树的前中后序遍历以及层序遍历
  17. 路由器经常断网,网络不稳定怎么办, 教你如何让旧路由器也能运转飞起
  18. 计算机二级vp是什么意思,国家计算机二级VP笔试真题.doc
  19. python识别火车票二维码_Python3 实现查询火车票工具
  20. MapboxMap 加载Amap地图图源

热门文章

  1. 一文了解什么是指数族分布
  2. Nature:初步探索限制饮食如何影响肿瘤生长
  3. 一个困扰数学家30多年的分类问题,终于被解决了!
  4. 首张人类黑洞照片的背后
  5. 云计算与边缘计算协同发展的一些思考
  6. 装配式建筑连入自动驾驶技术,未来城市的房子居然是这个样子......
  7. 中国机器人产业发展报告(2018)正式发布!
  8. AI、区块链和机器人:技术会让未来的工作发生什变化?
  9. 重磅:ATT的《5G移动边缘计算白皮书》!
  10. 尴尬!嫌疑人以为警察不懂技术偷删代码,不料被当场识破