• 基于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 发布!

  • 相关阅读:
    前沿技术解密——VirtualDOM
    Ques核心思想——CSS Namespace
    Unix Pipes to Javascript Pipes
    Road to the future——伪MVVM库Q.js
    聊聊CSS postproccessors
    【译】十款性能最佳的压缩算法
    Kafka Streams开发入门(9)
    Kafka Streams开发入门(8)
    【译】Kafka Producer Sticky Partitioner
    【译】99th Percentile Latency at Scale with Apache Kafka
  • 原文地址:https://www.cnblogs.com/sherrykid/p/12013479.html
Copyright © 2020-2023  润新知