django 实现 多人聊天 实时通信方式总结

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组,想这个组推送信息到 前端

流程同上/

 

 

 

 

 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值