wow-im
是一款基于的即时通讯产品,支持的终端包括: H5、PC、IOS & Android (ReactNative)
演示:
- H5 https://wow-im.airtlab.com/mobile
- PC https://wow-im.airtlab.com/web
- 安卓 https://github.com/wiiai/wow-im-rn/release
- IOS https://github.com/wiiai/wow-im-rn/release
源码:
- 服务端 https://github.com/wiiai/wow-im/server
- H5 https://github.com/wiiai/wow-im/ui
- ReactNative https://github.com/wiiai/wow-im-rn
- 账户
- 登录
- 通讯录
- 好友列表
- 群
- 聊天
- 单聊
- 群聊
- 视频单聊
- 语音单聊
- 消息内容
- 文字
- 会话
- 会话列表
- 历史消息
会话列表是一个聊天窗口列表,包括群以及好友,类似微信首页
会话列表中显示着我与每个群,每个人最后消息的展示,提供聊天的入口。要满足最新消息展示在最前。那么这个列表如何维护呢?
两个人 1对1 聊天,这两个人是共享一个会话,还是各自维护一条
最简单的方案就是每个消息发送时更新会话列表,这种情况会造成大量的更新。对于1对1的私聊,会更新两个会 如何才能更好的设计出会话列表。
第一种:发送消息时创建,第二种:加好友时或者加群时就创建好。如果发消息时创建,那么每次发消息都要判断是否已经创建,会导致查询次数剧增。
如果采取后则,那在展示上会比较奇怪,可以增加一个表示激活状态的字段 active
。未激活的 session 不会展示给用户,发送消息时,会更新 session 为激活状态。
未读消息有两个维度,首先单个会话的未读,其次所有会话的累积未读,假如一个群有100人,那么100人中每个人的未读数量可能是不同的
- 私聊时阅读人只有1个,群聊时阅读人就有很多了,每个人每条消息如何维护呢?如果每个人每条消息都要维护一条记录,拿数据量太大了。
- 未读数量这个值,是直接维护在 DB 中?,还是初始化查询时动态计算?采用后者比较合理,否则每次写入时,需要更新
未读数量
考虑消息的偏序问题,在 session 中维护用户最后一次阅读时间,未读消息的查询为:消息发送时间 > 最后一次阅读时间
1、给在线用户发起会议邀请推送,被邀请者点击同意后进入会议详情 2、任何用户可以通过会议 URL 进入会议 (DB里面需要创建会议信息,会议ID 标识会议)