目标

实现一个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表结构

  • 核心逻辑

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

Http接口请求需要认证

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

MQ异步发送

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

使用JMeter进行WebSocket压力测试

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

核心代码

获取认证token

检查token是否有效

SpringBoot与Netty的整合

  • WebSocket能够接收的参数类型

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

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

推送接口

MQ异步推送

源码

源码

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

基于SpringBoot+Netty实现一个自己的推送服务系统的更多相关文章

  1. 基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)

    1.前言 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力. 这种在APP处于后台或关闭情况下的消息推送能力,通常在以下场景下非常有用: 1)IM即时通讯 ...

  2. Netty系列之Netty百万级推送服务设计要点

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  3. Netty_Netty系列之Netty百万级推送服务设计要点

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  4. 【netty】Netty系列之Netty百万级推送服务设计要点

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  5. Netty系列之Netty百万级推送服务设计要点(转)

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  6. Netty学习总结(3)——Netty百万级推送服务

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  7. 基于SpringBoot如何实现一个点赞功能?

    基于SpringBoot如何实现一个点赞功能? 解析: 基于 SpringCloud, 用户发起点赞.取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储 ...

  8. 基于netty-socketio的web推送服务

    实时消息的推送,PC端的推送技术可以使用socket建立一个长连接来实现.传统的web服务都是客户端发出请求,服务端给出响应.但是现在直观的要求是允许特定时间内在没有客户端发起请求的情况下服务端主动推 ...

  9. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

随机推荐

  1. Appium的加载过程

    appium运行流程 Appium的加载过程如上图. 1)调用Android adb完成基本的系统操作: 2)向Android上部署bootstrap.jar: 3)Bootstrap.jar For ...

  2. [考试反思]1028csp-s模拟测试91:预估

    这一轮是要闹哪样啊???前十都死活进不去??? 能不能不要到联赛前突然连续掉链子啊!!! 总算难得的切掉了T1.然后又一次把T2和T3的难度估反了 结果给T2剩下了30分钟,想到正解来不及打了. 然后 ...

  3. NOIP模拟 9

    %liu_runda Orz T1 随 矩阵快速幂结合概率期望 但n3无法承受 利用原根的性质,将乘法转化成加法 就变成循环矩阵n^2了 改题时苦b地卡了关:误把1当成原根的1次方,错误地认为矩阵的阶 ...

  4. Spring Boot 2.X(十六):应用监控之 Spring Boot Actuator 使用及配置

    Actuator 简介 Actuator 是 Spring Boot 提供的对应用系统的自省和监控功能.通过 Actuator,可以使用数据化的指标去度量应用的运行情况,比如查看服务器的磁盘.内存.C ...

  5. 你了解MySQL中的多表联合查询吗?

    前言: 多表联合查询,其实就是我们MySQL中的join语句,经常会看到有人说join非常影响性能,不建议使用,你知道这是为什么呢?我们究竟可不可以用呢? 测试数据: CREATE TABLE `t2 ...

  6. Linux命令实战(一)

    1.pwd(printing working directory)打印当前工作目录路径 [root@test sysconfig]# pwd /etc/sysconfig 2.ls(list)列出当前 ...

  7. ChickenLegend Image

  8. 力扣(LeetCode)二进制间距 个人题解

    输入:6 输出:1 解释: 6 的二进制是 0b110 . 示例 4: 输入:8 输出:0 解释: 8 的二进制是 0b1000 . 在 8 的二进制表示中没有连续的 1,所以返回 0 . 提示: 1 ...

  9. Linux进程管理(ps、pstree、top、pidof、kill、nice、free)

    进程号(Process ID,PID) 1.ps命令(process status) 无选项时只显示从当前终端当前用户的进程 ps aux 是用BSD的格式来显示 java这个进程显示的项目有:USE ...

  10. python接口自动化--Excel

    1.操作步骤: (1)安装python官方Excel库-->xlrd (2)获取Excel文件位置并读取 (3)读取sheet (4)读取指定rows和cols内容 2.示例代码 # -*- c ...