默认
发表评论 4
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教关于IM中服务端做消息撤回功能的问题
阅读(47115) | 评论(4 收藏 淘帖
对于用户单聊的撤回功能,我个人分析了有四种状态
1.A给B发消息时,B在线,A撤回时,B也在线,这种是最理想的状况,只需要删除数据库的聊天记录数据就行了
2.A给B发消息时,B在线,A撤回时,B不在线,这种情况,也算简单,只需要删除数据库的在线聊天数据,然后把撤回这一动作当作一条消息存入离线消息数据库,等B登陆时拉取离线消息就行了,然后B再让服务端删除离线消息。
3.A给B发消息时,B不在线,A撤回时,B也不在线。这种情况需要删除聊天记录数据和离线聊天数据。
4.A给B发消息时,B不在线,A撤回时,B在线,这个时候则需要删除数据库的聊天记录。
问题一:
客户端A在做撤回这个动作的时候,qq或微信或者其他IM具体是怎么做的?是客户端A发条指令给服务端,然后又服务端转发给客户端B吗?还是客户端A发条指令给客户端B
问题二:
“撤回”这种功能在IM中是当做一条“特殊的消息”吗?是不是要录入到数据库的聊天记录表里面去
问题三:
前面的 第2,第3,和第4,要如何区分比较好,要如何实现比较好?
先谢谢大佬的解答!感激不尽

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

标签:IM开发
上一篇:一文读懂即时通讯应用中的网络心跳包机制:作用、原理、实现思路等下一篇:求助公司自己搭建了IM应用,iOS端消息推送部分该如何实现?
推荐方案
评论 4
我看你写的逻辑,比较清晰,但技术问题应该要看到本质,就不会感觉复杂了。

其实,消息撤回的本质就是:
将原先那条正常的消息内容变成“谁谁谁已撤回一条消息!”。

所以不管情况有多少种,你要做的事情就是:
新增“消息撤回”这个新指令,它的作用,就是将指定消息ID的聊天消息变为“谁谁谁已撤回一条消息!”。

此指令涉及的数据变更范围就是:
1)数据库里的离线消息(如果没有离线消息,此步就不需要做);
2)服务端的聊天记录(如果你的服务端有存聊天记录,此就就需要做,不存就不需要做);
3)对方已收到的消息(在撤回前不管这条消息是通过离线收到还是实时收到的,不需要区分,反正就是要把用户看到的变成“谁谁谁已撤回一条消息!”就行)。

所以,基于上述思路,希望你大本质上来思考,这样就能减少很多复杂性,不然情况太多了,而且有些情况你也并不一定考虑完全了。总之,你针对结果来构思就是了。

楼主的问题一,肯定是A把指令发给服务端,服务端处理完撤回逻辑后,再转发指令给B,不然服务端的聊天记录、离线消息就不好处理了
引用:弱鸡哥 发表于 2019-08-08 20:03
楼主的问题一,肯定是A把指令发给服务端,服务端处理完撤回逻辑后,再转发指令给B,不然服务端的聊天记录、 ...

谢谢
引用:JackJiang 发表于 2019-08-08 19:49
我看你写的逻辑,比较清晰,但技术问题应该要看到本质,就不会感觉复杂了。

其实,消息撤回的本质就是: ...

非常感谢
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部