目的

设计qq聊天,discord

场景

需要

  1. 发送消息
  2. 注册登录
  3. 通讯录

其他功能

  1. 限制登录状态
  2. 用户在线状态

qps计算

微信越活10亿,每日发送450B

qps最大是520k

一条记录是30bytes,那就是1.3T一天

服务

  1. 信息存放
  2. 实时推送消息(fcm)

存储

出现无法进行群聊存放,而且查询where太多了

这边是使用一个thread作为一个会话,thread就相当于你与每一个人的会话

只需要查询,thread——id就可以确定会话,然后会话id联系一条msg

添加未读取的消息数量

这样就需要查分thread表格

个人设置这个会话的属性+为读取数量

问题

如何查询threadid

1
2
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接受消息

  1. 打开一个推送服务,推送服务自己推送

支持群聊

群聊500+,490死人,那就是浪费了490push机会

应该使用channel方式,上线才进行检验属于那个channel,执法一次消息

单机登录’

使用redis,查找session,看是不是存在web