iOS 项目Socket框架:FGSocketService
2018-04-02 本文已影响284人
FGNeverMore
虽然CocoaAsyncSocket已经非常的成熟,但是由于项目,业务,协议等不同导致tcp模块的公用性不高,需要根据协议重新订制调整,不能直接拷贝框架使用。
有感于以前项目中通信框架的十分臃肿(...每个协议号对应着一个Model类的架构,怎么吐槽),对项目的Tcp框架重新梳理,拿出来和大家分享一下,肯定有不完善之处,希望各位大佬指点。
连接:GitHub
文件目录:
文件目录.png逻辑文件说明:
逻辑文件.png- FGSocketService类:这个类位于最上层,负责对整个APP提供接口,供外部调用。
- FGSocketConnection类:只负责socket网络的连接通信,内部使用GCDAsyncSocket;
- FGSocketChannel类:继承FGSocketConnection类,负责向FGSocketService类提供接口,负责数据的分发,但FGSocketService不直接使用FGSocketChannel类,而是使用子类FGSocketChannelDefault。
- FGSocketChannelDefault类:继承自FGSocketChannel类,主要负责TCP状态监控和重连。
- FGSocketConnectionDelegate.h:对FGSocketConnection方法声明的封装。
- FGSocketPacketDecode和FGSocketPacketEncode类:负责对数据进行编解码,对粘包,分包进行处理。
- FGSocketConnectParam类:连接socket的配置数据Model。
数据文件说明:
数据.pngFGSocketPacket声明协议类型和数据,子类通过初始化方法填充数据。
这里的注意点:
- 每个公司定的数据包格式不同,所以解析方法也不同,需要作出修改。
- 数据有大小端之分,而iOS采用小端,如果服务器采用大端格式传递数据,那要做出相应转换。
- 代码中数据包组装方式:包大小(short)+ 协议号(int)+ 无意义数据(short)+ json 数据;
调用接口说明:
//用户登录,满足了可以连接Socket的条件,内部自动调用连接方法
[[FGSocketService shareSocketService] appLogin];
//发送数据包,传递协议号和数据
[[FGSocketService shareSocketService] sendPacketWithPacketType:kSocetMsgType content:@{
//组装数据
}];
//退出登录,清理数据,断开连接,禁止重连
[[FGSocketService shareSocketService] appLogout];
写在最后:
欢迎大家留言交流,喜欢的话给个✨。