妙哉 |
IM架构学习开启 |
第一次这么系统性的看一套知识 |
学习了 |
感谢分享 |
学习了,非常好! |
引用:ichampion 发表于 2018-02-02 10:50 客户端应该会有对每个会话的消息做merge吧 |
良心教程,学习下 |
学习学习了 |
引用:JackJiang 发表于 2018-02-02 10:40 我就卡在这一步,离线消息如何无条件插到列表前面?如果我的离线消息里面有一张图片(或者说离线消息体量比较大),那这个时候,实时的消息已经push过来了,之后我收到了图片并且转码完成要显示了,如您所说,不判断时间的话,怎么让图片显示在它该显示的地方呢? |
引用:ichampion 发表于 2018-02-02 09:08 离线消息一定是无条件插到聊天列表的前面的,因为这次拉的消息肯定比你刚才收到的实时消息要老,不用判断时间都可以做到。 |
引用:JackJiang 发表于 2018-02-01 17:37 我知道是“拉”取消息,我的意思是:打个比方,我微信上线了,这时候我会从服务端获取离线消息(比如是我朋友约我星期六玩),但是很巧的是,在我拉取消息的时候,这个朋友想确认一下我星期六是否有空,又给我发了信息,此时我是在线的,应该由服务端push过来。那客户端是不是要做消息时间的判断来显示消息呢?否则的话,可能他实时的消息显示在前,离线的消息显示在后。但是客户端做时间判断的话,可能出现一种情况就是我实时的消息显示了,结果离线消息过来以后,在当前的消息之前又冒出来几条消息。这样的场景在微信中好像不存在。 |
引用:ichampion 发表于 2018-02-01 16:09 有个概念你可能分的不清。 现在主流的IM中,离线消息和实时消息走的是不同的通道,离线消息是在登陆时通过http短连接“拉”过来的(这种体验你可以在你换手机时,微信首次登陆时,你能看到消息或数据的加载有个加载百分比的显示,能明显感觉出来。平时你如果有群的话,你启动app时会看到未读数一直在往上加,这表示微信在分页加载这些数据,但肯定不会是通过实时通道“推”,真如你所考虑的——这太奢侈了,而且性能一定会有影响)。 你可以参考一下论坛的IM干货系列文章:
|
博主好,如你所说,将未成功发送的消息或离线消息暂存到消息队列。 1、此时客户端上线,而服务端有在线消息和离线消息都要推给客户端,如何保证这两种消息的时序性? 2、服务端如何判断消息送达,判断客户端是否在线不能保证消息必达;如果用回调+延时判断转发失败,那是不是要用一个队列来管理回调函数?这样在高并发的情况下是否会对系统性能产生影响? |
引用:pigo残 发表于 2017-07-27 10:28 按照我的理解就是:一般的TCP/IP通信可能出现丢包,也不一定能保证消息顺序发送,MQ就是解决这个问题的。不知道对不对。 |
学习 |
架构很好,可是具体实现好难啊,没有一定积累很难产品化 |
xuexile |
慢慢看 |
来学习一下! |