分享个简单的 springboot websocket demo

2021-02-01 00:02:15 +08:00
 Aidenboss

github 地址: https://github.com/yemingfeng/jchat-server

一个简单、基于 springboot websocket 的 demo

依赖
redis 配置

redis 默认使用 localhost:6379 。如果需要修改 host:port,可以修改 application.yml
redis 仅仅用于存储用户 username / password

使用
服务端启动

启动后,会监听 localhost:8080 端口
其中,websocket url 为 ws:localhost:8080/ws
获取在线用户数接口为 http://localhost:8080/session/page

前端测试

可以使用 http://coolaf.com/tool/chattest
由于有简单的帐号体系,链接时需要制定 username / password,若 username 不存在,则直接注册成功;否则会判断 username / password 是否匹配
如 ws://localhost:8080/ws?username=aiden&password=123 才能进行连接 图示:

1923 次点击
所在节点    Java
11 条回复
Aidenboss
2021-02-01 00:03:03 +08:00
仅简单的分享下,要是需要加其他功能,可以戳我
para344
2021-02-01 10:01:55 +08:00
分布式下,怎么实现 A 用户给 B 用户发消息?
Aidenboss
2021-02-01 10:04:09 +08:00
@para344 我去开发下。
理论逻辑比较简单,可以使用 redis pub/sub 功能
当一个用户上线,该实例就订阅一个 key:jchat:{user_id},
当用户下线,就关闭那个 key
Aidenboss
2021-02-01 11:30:51 +08:00
Aidenboss
2021-02-01 11:31:57 +08:00
鉴于有大佬提出分布式下的情况,使用 redis pub/sub 功能实现了一版
核心逻辑代码: https://github.com/yemingfeng/jchat-server/commit/82692046e847ad44d189efc1f1da8dce3395f0f1
RedBeanIce
2021-02-01 11:34:29 +08:00
歪楼,此条评论是水军,没有任何意义

可以尝试一下,netty 手写 websocket,甚至可以试一下 NIO 类写 websocket
Aidenboss
2021-02-01 11:43:52 +08:00
@RedBeanIce 其实一开始是打算用 netty 写的,也已经写的差不多了。
之后会发出来
xxxyh
2021-02-01 12:04:59 +08:00
我们也是这么做的,通过 redis pub/sub 实现分布式,订阅同一个 id,就可以实现类似聊天室的场景
vishun
2021-02-01 15:41:04 +08:00
我看好多都是用`stomp`来实现的。
Aidenboss
2021-02-01 18:03:47 +08:00
升级了下,变成了支持多设备登录 + 分布式的 websocket demo
para344
2021-02-02 17:35:38 +08:00
@Aidenboss 点赞

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

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

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

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

© 2021 V2EX