V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Aidenboss
V2EX  ›  Java

分享个简单的 springboot websocket demo

  •  
  •   Aidenboss · 2021-02-01 00:02:15 +08:00 · 1695 次点击
    这是一个创建于 1174 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    可以尝试一下,netty 手写 websocket,甚至可以试一下 NIO 类写 websocket
    Aidenboss
        7
    Aidenboss  
    OP
       2021-02-01 11:43:52 +08:00
    @RedBeanIce 其实一开始是打算用 netty 写的,也已经写的差不多了。
    之后会发出来
    xxxyh
        8
    xxxyh  
       2021-02-01 12:04:59 +08:00
    我们也是这么做的,通过 redis pub/sub 实现分布式,订阅同一个 id,就可以实现类似聊天室的场景
    vishun
        9
    vishun  
       2021-02-01 15:41:04 +08:00
    我看好多都是用`stomp`来实现的。
    Aidenboss
        10
    Aidenboss  
    OP
       2021-02-01 18:03:47 +08:00
    升级了下,变成了支持多设备登录 + 分布式的 websocket demo
    para344
        11
    para344  
       2021-02-02 17:35:38 +08:00
    @Aidenboss 点赞
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1870 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:21 · PVG 00:21 · LAX 09:21 · JFK 12:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.