默认

浅谈IM系统的架构设计

查看数: 345288 | 评论数: 24 | 收藏 28
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-05-14 16:28

正文摘要:

1、前言 除去QQ、微信这样的即时通讯聊天工具,还有许多细分行业的IM,比如淘宝阿里旺旺、网易泡泡、YY语音......。恰巧公司产品也要开发一款基于我们自己行业的类IM系统,很有幸我担当了这个产品的架构师,核心代 ...

评论

softbin 发表于 7 个月前
IM架构学习开启
嘟嘟嘟哒 发表于 3 年前
第一次这么系统性的看一套知识
hano 发表于 3 年前
学习了
poiupoiu 发表于 4 年前
感谢分享
wangfen_cread 发表于 4 年前
学习了,非常好!
妮子 发表于 4 年前
引用:ichampion 发表于 2018-02-02 10:50
我就卡在这一步,离线消息如何无条件插到列表前面?如果我的离线消息里面有一张图片(或者说离线消息体量 ...

客户端应该会有对每个会话的消息做merge吧
ckcsb 发表于 6 年前
良心教程,学习下
jecelyin 发表于 6 年前
学习学习了
ichampion 发表于 6 年前
引用:JackJiang 发表于 2018-02-02 10:40
离线消息一定是无条件插到聊天列表的前面的,因为这次拉的消息肯定比你刚才收到的实时消息要老,不用判断 ...

我就卡在这一步,离线消息如何无条件插到列表前面?如果我的离线消息里面有一张图片(或者说离线消息体量比较大),那这个时候,实时的消息已经push过来了,之后我收到了图片并且转码完成要显示了,如您所说,不判断时间的话,怎么让图片显示在它该显示的地方呢?
JackJiang 发表于 6 年前
引用:ichampion 发表于 2018-02-02 09:08
我知道是“拉”取消息,我的意思是:打个比方,我微信上线了,这时候我会从服务端获取离线消息(比如是我 ...

离线消息一定是无条件插到聊天列表的前面的,因为这次拉的消息肯定比你刚才收到的实时消息要老,不用判断时间都可以做到。
ichampion 发表于 6 年前
引用:JackJiang 发表于 2018-02-01 17:37
有个概念你可能分的不清。
现在主流的IM中,离线消息和实时消息走的是不同的通道,离线消息是在登陆时通 ...

我知道是“拉”取消息,我的意思是:打个比方,我微信上线了,这时候我会从服务端获取离线消息(比如是我朋友约我星期六玩),但是很巧的是,在我拉取消息的时候,这个朋友想确认一下我星期六是否有空,又给我发了信息,此时我是在线的,应该由服务端push过来。那客户端是不是要做消息时间的判断来显示消息呢?否则的话,可能他实时的消息显示在前,离线的消息显示在后。但是客户端做时间判断的话,可能出现一种情况就是我实时的消息显示了,结果离线消息过来以后,在当前的消息之前又冒出来几条消息。这样的场景在微信中好像不存在。
JackJiang 发表于 6 年前
引用:ichampion 发表于 2018-02-01 16:09
博主好,如你所说,将未成功发送的消息或离线消息暂存到消息队列。
1、此时客户端上线,而服务端有在线消 ...

有个概念你可能分的不清。
现在主流的IM中,离线消息和实时消息走的是不同的通道,离线消息是在登陆时通过http短连接“拉”过来的(这种体验你可以在你换手机时,微信首次登陆时,你能看到消息或数据的加载有个加载百分比的显示,能明显感觉出来。平时你如果有群的话,你启动app时会看到未读数一直在往上加,这表示微信在分页加载这些数据,但肯定不会是通过实时通道“推”,真如你所考虑的——这太奢侈了,而且性能一定会有影响)。

你可以参考一下论坛的IM干货系列文章:
ichampion 发表于 6 年前
博主好,如你所说,将未成功发送的消息或离线消息暂存到消息队列。
1、此时客户端上线,而服务端有在线消息和离线消息都要推给客户端,如何保证这两种消息的时序性?
2、服务端如何判断消息送达,判断客户端是否在线不能保证消息必达;如果用回调+延时判断转发失败,那是不是要用一个队列来管理回调函数?这样在高并发的情况下是否会对系统性能产生影响?
ichampion 发表于 6 年前
引用:pigo残 发表于 2017-07-27 10:28
能说说MQ在IM架构中的使用方式么

按照我的理解就是:一般的TCP/IP通信可能出现丢包,也不一定能保证消息顺序发送,MQ就是解决这个问题的。不知道对不对。
四毛钱_ijnei 发表于 6 年前
学习
littleboyer 发表于 6 年前
架构很好,可是具体实现好难啊,没有一定积累很难产品化
bearly 发表于 6 年前
xuexile
xy521174 发表于 6 年前
慢慢看
SylvanasTeemo 发表于 6 年前
来学习一下!
dusuijiang 发表于 6 年前
学习中

返回顶部