Skip to content

wiiai/wow-im

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wow-im

wow-im 是一款基于的即时通讯产品,支持的终端包括: H5、PC、IOS & Android (ReactNative)

演示:

源码:

已实现功能

  • 账户
    • 登录
  • 通讯录
    • 好友列表
  • 聊天
    • 单聊
    • 群聊
    • 视频单聊
    • 语音单聊
  • 消息内容
    • 文字
  • 会话
    • 会话列表
    • 历史消息

1. 会话列表的查询和维护

会话列表是一个聊天窗口列表,包括群以及好友,类似微信首页

image

会话列表中显示着我与每个群,每个人最后消息的展示,提供聊天的入口。要满足最新消息展示在最前。那么这个列表如何维护呢?

1.1 独立会话还是共享会话?

两个人 1对1 聊天,这两个人是共享一个会话,还是各自维护一条

1.2 发送消息时更新会话列表

最简单的方案就是每个消息发送时更新会话列表,这种情况会造成大量的更新。对于1对1的私聊,会更新两个会 如何才能更好的设计出会话列表。

1.3 什么时候创建会话

第一种:发送消息时创建,第二种:加好友时或者加群时就创建好。如果发消息时创建,那么每次发消息都要判断是否已经创建,会导致查询次数剧增。 如果采取后则,那在展示上会比较奇怪,可以增加一个表示激活状态的字段 active。未激活的 session 不会展示给用户,发送消息时,会更新 session 为激活状态。

2. 未读消息的维护

未读消息有两个维度,首先单个会话的未读,其次所有会话的累积未读,假如一个群有100人,那么100人中每个人的未读数量可能是不同的

imageimage

2.1 未读数量

  • 私聊时阅读人只有1个,群聊时阅读人就有很多了,每个人每条消息如何维护呢?如果每个人每条消息都要维护一条记录,拿数据量太大了。
  • 未读数量这个值,是直接维护在 DB 中?,还是初始化查询时动态计算?采用后者比较合理,否则每次写入时,需要更新 未读数量

2.2 标记已读

考虑消息的偏序问题,在 session 中维护用户最后一次阅读时间,未读消息的查询为:消息发送时间 > 最后一次阅读时间

3. 用户在线状态

会议流程

1、给在线用户发起会议邀请推送,被邀请者点击同意后进入会议详情 2、任何用户可以通过会议 URL 进入会议 (DB里面需要创建会议信息,会议ID 标识会议)