在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一:项目简介: 去年开始接手了一个国企移动项目,项目的需求是实现IM即时通讯功能。 * 一期版本功能包括了: 1.公司业务的审批,报价和授标审批流程; 2.单人的聊天和群组聊天(领导日常工作交流); 3.聊天消息包括支持文字类消息,语言,图片,并且语言支持跨平台; 4.对消息的网络数据传递实现加密压缩处理,保证数据安全传输; * 项目特点: 因为项目业务的:审批,报价和授标审批流程的特殊性, IM的实现不能应用第三方,比如:极光推送等,所以需要实现处理Socket底层数据解刨。
二: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系统的性能优化,为项目的迭代打下坚韧的基础。 |
请发表评论