默认
发表评论 7
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
我的IM即时群聊感觉收消息很卡很慢(1秒一条),该怎么处理
阅读(54292) | 评论(7 收藏1 淘帖
我现在使用的 AsyncSocket 进行聊天数据的传输,单聊的话还没感觉到什么,但是刚测试群聊(因为后台测试是一秒钟一条消息)好像很卡,请问如何处理

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:IM开发
上一篇:微信Mars:微信内部正在使用的网络层封装库,即将开源下一篇:即时通讯安全篇(五):对称加密技术在Android平台上的应用实践
推荐方案
评论 7
你的问题问的不够具体,你是学习还是实习生?

你应该具体描述以下内容:
1)你的平台:到底是客户端卡还是服务端卡;
2)用的是是什么平台(ios、android、windows、linux?)
3)用的什么语言、用的什么socket框架?
4)有错误日志吗?有就贴出来!
5)存在嫌疑很在的代码吗?有就贴出来!
哎,新手吧,回答这样的问题真想教你做人。。。
签名: 秋天到了,终于凉快了
引用:JackJiang 发表于 2016-12-08 12:23
你的问题问的不够具体,你是学习还是实习生?

你应该具体描述以下内容:

抱歉,我是刚接触这一块的,问题没描述好
我是 iOS 端, iOS 端卡
就是 didReadData 方法调用的很频繁
收到消息后要保存数据
刷新 UI 所以很卡?
我开了线程处理数据(dispatch_async(dispatch_get_global_queue(0, 0), ^{}))
但是还是有一点点卡,所以问一下大神们是怎么处理这一块的额
我是在工具类里面获取到数据,代理传递给聊天页面,对数据处理,然后刷新 UI
引用:cckv 发表于 2016-12-08 13:45
我是在工具类里面获取到数据,代理传递给聊天页面,对数据处理,然后刷新 UI

很显然,你得准确地找出到底是什么卡?接收数据卡你就查网络数据读写,界面卡你就去查查多线程异步调用是否用的不对
解决方案:
1.消息的收发统一放在服务中进行,与UI线程隔离,减少UI线程压力
2.优化UI组件,是否你的UI空间有问题,嵌套太多,渲染布局是要消耗资源的
3.消息的发送要先存入本地sqlite,本地维护一个发送队列表,外键关联消息记录id,以本地时间先后顺序排列,本地消息服务依次按时间先后顺序发送队列消息,发送失败启用重试机制,三次失败标识发送失败,并且检查是否当前有网络,是否断开连接,重新登录后继续扫描你的队列发送消息,与你当前的UI是没关系的
4.同步消息机制放在服务中进行
5.采用greendao作为数据库框架,nosql机制,能保证你的存储性能得到提升
6.每次进入聊天的页面会获取历史消息,采用分页机制,用gendao获取最新的几条数据(依据你的设备大小,需要获取和显示几条,适配各种机型)

引用:caixiang 发表于 2016-12-17 13:32
解决方案:
1.消息的收发统一放在服务中进行,与UI线程隔离,减少UI线程压力
2.优化UI组件,是否你的UI空 ...

说的很好,赞!
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部