7.聊天室设计
目的
设计qq聊天,discord
场景
需要
- 发送消息
- 注册登录
- 通讯录
其他功能
- 限制登录状态
- 用户在线状态
qps计算
微信越活10亿,每日发送450B
qps最大是520k
一条记录是30bytes,那就是1.3T一天
服务
- 信息存放
- 实时推送消息(fcm)
存储
出现无法进行群聊存放,而且查询where太多了
这边是使用一个thread作为一个会话,thread就相当于你与每一个人的会话
只需要查询,thread——id就可以确定会话,然后会话id联系一条msg
添加未读取的消息数量
这样就需要查分thread表格
个人设置这个会话的属性+为读取数量
问题
如何查询threadid
1 | SELECT thread_id FROM threads WHERE user_ids = SORT(ARRAY[user_id_A, user_id_B]) AND thread_type = 'private' |
直接进行排序后,然后查询uid就可以得到,使用haxi加快
存储
使用sql来存放
推送
自救就是poll或者pull
web接受消息
- 打开一个推送服务,推送服务自己推送
支持群聊
群聊500+,490死人,那就是浪费了490push机会
应该使用channel方式,上线才进行检验属于那个channel,执法一次消息
单机登录’
使用redis,查找session,看是不是存在web
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.