1,前端轮询(轮询 聊天室 和 每个聊天室的 消息)
短轮训:不断轮训 聊天室 和 聊天室的 最新的消息
获取聊天室 的时候 拿到最近 历史消息
聊天室的 最新的消息
mysql :
用户表:创建好友,陌生人,黑名单,群
聊天室表:
消息表:存储 每个聊天室的消息(不需要持久化,可以放到 redis)(各种 状态) 通过createtime 获取 最新的消息(前端传回来)
长轮训:通过可以堵塞的队列 实现
不断轮训 聊天室 和 聊天室的 最新的消息
mysql :
用户表:创建好友,陌生人,黑名单,群
消息表:存储 每个聊天室的消息(不需要持久化,可以放到 redis)(各种 状态) 通过createtime 获取 最新的消息(前端传回来)
redis 或者 kafka:
聊天室:就是一个queue,channel,
redis:以用户为中心,每个用户一个队列(聊天室)key :(用户id 聊天室id),d将消息存入聊天室
kafka: 一个 聊天室 一个topic 要前端 返回 当前用户的 offset(这个最好)
rabbitmq: 与redis 相同
websocket:
流程:一个前端用户 发来 message,然后把 message 推送到 所有 message的room 的用户 socket.
一个 浏览器 一个用户 只需要一个 socket,按照信息 放入不同的 room
通过 web socket 实现 channel ,实现 双向 通信
django dwebsocket
关键点 在于 需要将 每个前端的 socket 按照用户 存入 全局 存储 (redis,mysql)
mysql:
room 表:
用户表:创建好友,陌生人,黑名单,群
消息表:
前端 socket 发来 信息 必须包含是那个 room ,然后通过room 找到 所有的 user,对应的socket推送到 前端。
channel:‘
https://www.jb51.net/article/166411.htm
前端 channel 发来 信息 必须包含是那个 group组的信息 ,然后通过 group组,想这个组推送信息到 前端
流程同上/