Aidenboss
V2EX  ›  Java

分享个简单的 springboot websocket demo

  •  
  •   Aidenboss · Feb 1, 2021 · 3220 views
  •   You need to sign in to view this topic
    This topic created in 2103 days ago, the information mentioned may be changed or developed.

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

    一个简单、基于 springboot websocket 的 demo

    依赖
    • maven
    • jdk11
    • redis
    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 才能进行连接 图示:

    Aidenboss
    Aidenboss
    OP
    Feb 1, 2021
    1
    仅简单的分享下,要是需要加其他功能,可以戳我
    para344
    para344
    Feb 1, 2021
    2
    分布式下,怎么实现 A 用户给 B 用户发消息?
    Aidenboss
    Aidenboss
    OP
    Feb 1, 2021
    3
    @para344 我去开发下。
    理论逻辑比较简单,可以使用 redis pub/sub 功能
    当一个用户上线,该实例就订阅一个 key:jchat:{user_id},
    当用户下线,就关闭那个 key
    Aidenboss
    Aidenboss
    OP
    Feb 1, 2021
    5
    鉴于有大佬提出分布式下的情况,使用 redis pub/sub 功能实现了一版
    核心逻辑代码: https://github.com/yemingfeng/jchat-server/commit/82692046e847ad44d189efc1f1da8dce3395f0f1
    RedBeanIce
    RedBeanIce
    Feb 1, 2021
    6
    歪楼,此条评论是水军,没有任何意义

    可以尝试一下,netty 手写 websocket,甚至可以试一下 NIO 类写 websocket
    Aidenboss
    Aidenboss
    OP
    Feb 1, 2021
    7
    @RedBeanIce 其实一开始是打算用 netty 写的,也已经写的差不多了。
    之后会发出来
    xxxyh
    xxxyh
    Feb 1, 2021
    8
    我们也是这么做的,通过 redis pub/sub 实现分布式,订阅同一个 id,就可以实现类似聊天室的场景
    vishun
    vishun
    Feb 1, 2021
    9
    我看好多都是用`stomp`来实现的。
    Aidenboss
    Aidenboss
    OP
    Feb 1, 2021
    10
    升级了下,变成了支持多设备登录 + 分布式的 websocket demo
    para344
    para344
    Feb 2, 2021
    11
    @Aidenboss 点赞
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4467 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 01:10 · PVG 09:10 · LAX 17:10 · JFK 20:10
    ♥ Do have faith in what you're doing.