zoukankan      html  css  js  c++  java
  • 基于SpringBoot+Netty实现一个自己的推送服务系统

    目标

    实现一个WebSocket服务中心,支持水平扩展

    技术栈

    SpringBoot、Netty、JDK8、MySQL、Redis、RabbitMQ、MyBatis-Plus

    环境搭建

    主要功能点说明

    WebSocket连接需要认证

    服务端提供token获取接口,WS连接前先获取token

    认证信息由服务端提供

    Http接口请求需要认证

    这里的接口一般就是推送接口

    后续可以把推送记录也做成接口进行查询

    支持单笔推送

    根据注册信息,查询到用户,进行推送

    支持批量推送

    根据注册信息,查询到用户,进行推送

    支持MQ异步推送

    支持定时推送

    记录推送日志

    记录连接日志

    支持集群部署

    代码设计

    WebSocket连接需要认证

    开发一个http接口用于获取认证头,WebSocket在注册上来的时候,只有带有正确的认证头,服务端才允许其注册

    • 相关设计
      • 一张保存了认证信息的表:reg_user
      • 一个获取token的http接口
      • 一个判断token是否合法的Service层方法
    • reg_user表结构

    image-20191209160801307

    • 核心逻辑
      • 一旦认证请求通过,将token存储到Redis中,并设置Key的过期时间
      • 校验的时候,通过查询Redis实现,只要还有这个token作为Key的键值对存在,就说么token合法
    • 待完善
      • 权限认证不够严谨,仅做到了身份识别,还没有进行精细化的权限控制
      • 关于接入方的账号分配,目前需要手工进行
      • 认证信息的密码是明文进行的存储

    Http接口请求需要认证

    • 编写一个过滤器,对于需要认证的接口,获取请求头中的token,进行合法性校验

    MQ异步发送

    • 作为消费者,消费异步请求
    • 作为生产者,将调用结果广播出去
      • fanout模式进行广播
      • 同时自己也监听此广播,保证至少有一个消费者

    使用JMeter进行WebSocket压力测试

    • 安装插件管理器
    • 安装WebSocket插件

    核心代码

    获取认证token

    image-20191209210053902

    检查token是否有效

    image-20191209210156135

    SpringBoot与Netty的整合

    image-20191209210242588

    • WebSocket能够接收的参数类型

    image-20191209210341387

    • WebSocket客户端注册时带的参数类型

    image-20191209210406070

    • 推送返回给WebSocket客户端的统一参数类型

    image-20191209210446737

    推送接口

    image-20191209210541866

    MQ异步推送

    image-20191209210609700

    源码

    源码

    本文由博客一文多发平台 OpenWrite 发布!

  • 相关阅读:
    java基础之二:取整函数(Math类)
    springboot:读取application.yml文件
    java基础之一:基本数据类型
    git操作之四:git branch(本地仓库)
    git操作之三:git reset
    git操作之二:git restore
    git操作之一:git add/commit/init
    Kubernetes 教程:在 Containerd 容器中使用 GPU
    Kubernetes 使用 Kubevirt 运行管理 Windows 10 操作系统
    在 macOS 中使用 Podman
  • 原文地址:https://www.cnblogs.com/sherrykid/p/12013479.html
Copyright © 2011-2022 走看看