在如今的移动互联网时代,IM类产品已是我们生活中不可或缺的组成部分。像微信、钉钉、QQ等是典型的以 IM 为核心功能的社交产品。另外也有一些应用虽然IM功能不是核心,但IM能力也是其整个应用极其重要的组成部分,比如在线游戏、电商直播等应用。
在IM技术应用场景越来越广泛的前提下,对即时通讯IM技术的学习和掌握就显的越来越有必要。
在IM庞大的技术体系中,消息系统无疑是最核心的,而消息系统中,最关键的部分是消息的分发和存储,而离线消息和历史消息又是这个关键环节中不可回避的技术要点。
IM消息投递的一般做法
在通常的IM消息系统中,对于实时消息、离线消息、历史消息大概都是下面这样的技术思路。
对于在线用户:消息会直接实时发送到在线的接收方,消息发送完成后,服务器端并不会对消息进行落地存储。
而对于离线的用户:服务器端会将消息存入到离线库,当用户登录后,从离线库中将离线消息拉走,然后服务器端将离线消息删除。
这样实现的缺点就是消息不持久化,导致消息无法支持消息漫游,降低了消息的可靠性。
什么是离线消息和历史消息?
关于离线消息和历史消息,在技术上,我们是这样定义。
1)离线消息:
离线消息就是用户(即接收方)在离线过程中收到的消息,这些消息大多是用户比较关心的消息,具有一定的时效性。
以我们的系统经验来说,我们的离线消息默认只保存最近七