iOS swift项目IM实现,从长链接到底层数据解析分析之Socketswift
一:项目简介: 去年开始接手了一个国企移动项目,项目的需求是实现IM即时通信功能。安全
* 一期版本功能包括了:性能优化
1.公司业务的审批,报价和授标审批流程;服务器
2.单人的聊天和群组聊天(领导平常工做交流);网络
3.聊天消息包括支持文字类消息,语言,图片,而且语言支持跨平台;框架
4.对消息的网络数据传递实现加密压缩处理,保证数据安全传输;异步
* 项目特色:socket
由于项目业务的:审批,报价和授标审批流程的特殊性, IM的实现不能应用第三方,好比:极光推送等,因此须要实现处理Socket底层数据解刨。tcp
二:iOS IM功能使用Socket的tcp请求协议来实现,推荐使用第三方sdk: CocoaAsyncSocket性能
CocoaAsyncSocket:OC的版本,是应用GCD写的异步处理,有兴趣的能够去看下原码
三:CocoaAsyncSocket
pod 'CocoaAsyncSocket' //能够经过pod集成
四:CocoaAsyncSocket init和delegate
----init分析------
----delegate分析------
* 实现CocoaAsyncSocket的4个代理来处理Socket通信数据,下面分别分析各个代理的做用:
1. - (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port;
2.- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(nullable NSError *)err;
* 有成功,那么一定会有失败:
更新的状态包括:1: 网络状态,2: 用户数据同步状态,3: 心跳间隔时间,4: 是不是强制从新链接
注:(一个健壮的性能又好的IM系统,须要考虑的因素很重要)
注: 本项目总负责王总,是后台出生,整个项目的后台(报告EQ系统,ERP系统)系统都有王总搭建,后台的整个IM框架也是王总集成,维护和改进,
国企职位高而且技术全面的确实佩服。
3.- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag;
4.- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag;
指令消息(syc指令),心跳消息,Init消息和Invoke(获取)消息;
五:Socke总结
* CocoaAsyncSocket 的Socket 链接层到这里差很少了,上面列出来的条例都是须要很是注意的地方。
* IM链接层还有个很是重要的地方:须要对项目的网络状态时时监控,网络状态的改变须要作处理,
4G网络下须要对用户提醒,虚拟网络下须要优化处理IM任务, 在断开链接重连的状况下要优先判断网络状态,
这些都是对IM系统的性能优化,为项目的迭代打下坚韧的基础。
注:下一篇: iOS swift项目IM实现,从长链接到数据流解析分析之Payload数据打包和解析。