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 支持
|
11
rizon 2019-06-17 11:47:42 +08:00
给楼主点赞,已 star。
为什么我做的 在线记事本就没人给 star 呢? 这个支持协同编辑(只能 PC ),使用 event stream 做的,没用 ws。我觉得协同和聊天也有点相似之处哈。 测试地址(如果没其他人在线可以自己多开窗口测试): http://notelive.cc/#v2ex github 地址: https://github.com/othorizon/notelive_webpack |