基于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表结构

- 核心逻辑
- 一旦认证请求通过,将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实现一个自己的推送服务系统的更多相关文章
- 基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)
1.前言 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力. 这种在APP处于后台或关闭情况下的消息推送能力,通常在以下场景下非常有用: 1)IM即时通讯 ...
- Netty系列之Netty百万级推送服务设计要点
1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...
- Netty_Netty系列之Netty百万级推送服务设计要点
1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...
- 【netty】Netty系列之Netty百万级推送服务设计要点
1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...
- Netty系列之Netty百万级推送服务设计要点(转)
1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...
- Netty学习总结(3)——Netty百万级推送服务
1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...
- 基于SpringBoot如何实现一个点赞功能?
基于SpringBoot如何实现一个点赞功能? 解析: 基于 SpringCloud, 用户发起点赞.取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储 ...
- 基于netty-socketio的web推送服务
实时消息的推送,PC端的推送技术可以使用socket建立一个长连接来实现.传统的web服务都是客户端发出请求,服务端给出响应.但是现在直观的要求是允许特定时间内在没有客户端发起请求的情况下服务端主动推 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
随机推荐
- NOIP模拟 4
T1没开longlong T2忘了有向... T3是个好题,可以说将复杂度从N^2优化到NlogN是一个质的飞跃 考虑分治(要想出log可不就要分治么!(segtree也行 但我不会) 对于一个分治区 ...
- Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作
ChuanGoing 2019-09-10 距离上一篇近一个月时间,断断续续才把本篇码完,后面将加快进度,争取年度内把本系列基本介绍完成,同时督促本人持续学习. 本篇学习曲线: 1.初识Dapper ...
- [springboot 开发单体web shop] 5. 用户登录及首页展示
用户登录及前端展示 用户登录 在之前的文章中我们实现了用户注册和验证功能,接下来我们继续实现它的登录,以及登录成功之后要在页面上显示的信息. 接下来,我们来编写代码. 实现service 在com.l ...
- P3052 [USACO12MAR]摩天大楼里的奶牛(迭代加深搜索)
(已经一句话了) 第一反应:暴力 第二反应:朴素算法过不去 第三反应:没法折半暴搜(没法统计答案) 所以,歪歪了一个类似贪心刷表的方法,过了这道题. 首先,如果爆搜的话会有几个状态: 当前牛 当前几个 ...
- day 2 DP专场
上午讲了一上午背包,从01背包到完全背包到多重背包,感觉也没说什么,旁边的大佬一直在飞鸽里说让老师讲快点,然而最后也没人敢跟老师说.... 例题真的各个都是神仙题, 挂饰 好像就是一上午最简单的... ...
- day 2 上午 挂饰 背包
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> us ...
- 持续集成Gitlab CICD Runner&Jenkins
目录 使用Gitlab Runner实现 再要部署的服务器上安装 gitlab runner 下载可执行文件 设置可执行权限权限 创建用户 运行服务 注册 Runner 到gitlab上找到需要用的U ...
- <深圳千锋学习>day01
2019.11.11 深圳千锋H5前端学习笔记
- windows使用docker运行mysql等工具(二)安装运行mysql
今天接着上一篇的内容继续来学习安装运行mysql.建议先阅读第一篇:windows安装docker 一 查看mysql版本 如果想知道mysql镜像具体有哪几个版本,需要去docker hub查看. ...
- unittest使用总结
unittest简介 Unittest是python内置的一个单元测试框架,主要用于自动化测试用例的开发与执行 简单的使用如下 import unittest class TestStringMeth ...