
Github 源码:boot-chat 欢迎 star,fork 支持
由于本人也在学习,技术有限。如果项目有问题,可以反馈、如果你有更好的解决方案请尽快联系我,谢谢~
线上地址
注意!注意!注意!
当前版本中,使用 HTTPSession 储存的 WebSocket 会话消息(包括登录用户信息),因此就不可避免的会遇到 Session 不能被共享导致的数据丢失。
因此,在我部署的线上地址上可能出现数据丢失。如果是测试学习,请使用同一个浏览器换用不同用户登录,就不会产生上述问题了。
SO,后续我会使用 Redis 储存 WebSocket 的会话消息(当前版本的优点就是开箱即用,只需要 JDK 环境即可运行项目打包 jar )。
正在开发中,欢迎 star、fork 关注哦~~
基于 SpringBoot-2.1.5、SpringBoot-Starter-Websocket 构建,前端使用 Vue.js 、ElementUI 框架。
实现了:
找 虫子 无聊之余,可以来耍一耍!
因为 WebSocket 的特性,虽然能实时接收到消息,但每次刷新浏览器,之前发送过的消息都会丢失,因此这里实现了消息储存功能。
利用 HttpSession,将每次会话,用户推送的消息都储存到 HttpSession 中。前端利用 Vue 的 created() 钩子函数,每次刷新页面时都先请求获取 HTTPSession 中已储存的消息列表。
因为涉及到单窗口推送消息、群发消息的限定:

这里规定了 HttpSession 中会话消息的前缀标识,以此来区分不同的消息,具体参看:CommonConstant.java
CHAT_COMMON_PREFIX = "CHAT_COMMON_": 群发消息 Session Key 前缀标识
CHAT_FROM_PREFIX = "CHAT_FROM_": 推送方 Session Key 前缀标识
CHAT_TO_PREFIX = "_TO_": 接收方 Session Key 前缀标识
看了上图你大概知道了 HTTPSession 中储存的消息格式,下面 Debug 看下具体的消息内容,供大家学习参考:
这里使用一个固定的官方群组窗口,展示每个用户群发的消息。
消息特点:
So,HTTPSession 中储存的群发消息应该有以下约定:
栗子:

对于给指定窗口消息,需要考虑以下几点:
So,HTTPSession 中储存的但窗口消息应该有以下约定:
栗子:

# 运行 $ git clone https://github.com/TyCoding/boot-chat -- use idea & eclipse run # 部署 $ mvn clean package $ cd taget $ java -jar boot-chat-0.0.1-SNAPSHOT.jar Access http://localhost:8080 using Chrome


1 nicenan 2019-06-16 16:55:11 +08:00 via Android 马克马克 |
2 zhuawadao 2019-06-16 16:56:00 +08:00 支持 |
4 geekaven 2019-06-16 17:06:02 +08:00 学习了 |
5 santana2000 2019-06-16 17:06:20 +08:00 支持支持 |
6 qinxi 2019-06-16 21:32:33 +08:00 看了一下. 没有 redis/mq 的依赖. 应该还不支持集群部署. |
7 bxb100 2019-06-16 21:50:22 +08:00 乍一看以为是 IM 解决方案, 仔细一看是个玩具 忽略以上, 支持实践 |
8 nyfok 2019-06-16 22:13:48 +08:00 mark 不错,有移动 h5 版本的么 |
9 sodadev 2019-06-17 08:26:47 +08:00 via iPhone 我也在写这块的功能 就是文件传输功能不好用 请问有什么需要注意的地方吗 |
10 zw1one 2019-06-17 10:23:25 +08:00 via Android star 支持 |