5)**未读数:**指用户还没读的消息数量。
6)**用户状态:**指用户当前是在线、离线还是挂起等状态。
7)**关系链:**是指用户与用户之间的关系,通常有单向的好友关系、双向的好友关系、关注关系等等(这里需要注意与会话的区别:用户只有在发起聊天时才产生会话,但关系并不需要聊天才能建立。对于关系链的存储,可以使用图数据库(Neo4j等等),可以很自然地表达现实世界中的关系,易于建模)。
8)**单聊:**一对一聊天。
9)**群聊:**多人聊天。
10)**客服:**在电商领域,通常需要对用户提供售前咨询、售后咨询等服务(这时,就需要引入客服来处理用户的咨询)。
11)**消息分流:**在电商领域,一个店铺通常会有多个客服,此时决定用户的咨询由哪个客服来处理就是消息分流(通常消息分流会根据一系列规则来确定消息会分流给哪个客服,例如客服是否在线(客服不在线的话需要重新分流给另一个客服)、该消息是售前咨询还是售后咨询、当前客服的繁忙程度等等)。
12)**信箱:**本文的信箱我们指一个Timeline、一个收发消息的队列。
涉及到功能的具体实现还有很多概念需要先了解下
读扩散 vs 写扩散
IM系统里经常会涉及到读扩散和写扩散这两个技术概念,我们来看看。
读扩散
**如上图所示:**A与每个聊天的人跟群都有一个信箱(有些地方会叫Timeline),A在查看聊天信息的时候需要读取所有有新消息的信箱。
**需要注意与Feeds系统的区别:**在Feeds系统中,每个人都有一个写信箱,写只需要往自己的写信箱里写一次就好了,读需要从所有关注的人的写信箱里读。但IM系统里的读扩散通常是每两个相关联的人就有一个信箱,或者每个群一个信箱。
读扩散的优点:
-
1)写操作(发消息)很轻量,不管是单聊还是群聊,只需要往相应的信箱写一次就好了;