基于 SpringBoot + WebSocket 的在线聊天系统,实现单窗口消息推送、群消息推送、上线提醒等

2019-06-16 16:49:16 +08:00
 TyCoding

基于 WebSocket 的在线聊天系统

Github 源码:boot-chat 欢迎 star,fork 支持

由于本人也在学习,技术有限。如果项目有问题,可以反馈、如果你有更好的解决方案请尽快联系我,谢谢~

线上地址

Chat

注意!注意!注意!

当前版本中,使用 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

文档

看了上图你大概知道了 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

关于我

传送门

预览

3801 次点击
所在节点    Java
11 条回复
nicenan
2019-06-16 16:55:11 +08:00
马克马克
zhuawadao
2019-06-16 16:56:00 +08:00
支持
TyCoding
2019-06-16 17:02:57 +08:00
@nicenan
@zhuawadao 蟹蟹蟹蟹,可以点亮右上角 star 哦
geekaven
2019-06-16 17:06:02 +08:00
学习了
santana2000
2019-06-16 17:06:20 +08:00
支持支持
qinxi
2019-06-16 21:32:33 +08:00
看了一下. 没有 redis/mq 的依赖. 应该还不支持集群部署.
bxb100
2019-06-16 21:50:22 +08:00
乍一看以为是 IM 解决方案, 仔细一看是个玩具

忽略以上, 支持实践
nyfok
2019-06-16 22:13:48 +08:00
mark 不错,有移动 h5 版本的么
sodadev
2019-06-17 08:26:47 +08:00
我也在写这块的功能 就是文件传输功能不好用 请问有什么需要注意的地方吗😑
zw1one
2019-06-17 10:23:25 +08:00
star 支持
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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/574471

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX