现在的java开发基本都是基于springboot,所以我们就基于springboot2环境。
效果展示(基于网页浏览器的,不是桌面程序)
通讯协议:
现在的主流浏览器基本都支持html5标准,所以我们就用websocket作为通信协议。
后端框架:
后端采用springboot作为主框架,配合websocket模块与前端通信,通过springboot整合redis,mybatis,mysql。
消息中转:
使用redis的订阅发布机制作为消息中转,实现消息的顺序消费,即保证数据的实时性,也保证数据的安全性。
聊天方式:
单人聊天,多人群聊,
离线消息:
当群聊时,或者单人聊天时,如果对方不在线,则记录离线消息,当对方上线时会统一接收。
代码参考
redis配置
消息中转器
用户模型
消息记录
群组聊天
使用redis的优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。