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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.