基于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上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
随机推荐
- 查找一个卷对应的osd
1.首先找到卷的id: 2.使用rados命令找到卷上面的对象数据: 3.通过ceph osd map命令可以查询到对象对应的pgid及pg对应的osd:
- 敏捷宣言(Agile Manifesto)和敏捷开发十二原则
敏捷宣言 The Agile Manifesto Individuals and interactions over Process and tools 个体与交互 重于 过程和工具 Working ...
- Lucas的数论:杜教筛,莫比乌斯反演
Description: 求$\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} d(i \times j)$ $d(i)$表示$i$的约数个数和.$n \leq ...
- Apache+Tomcat负载均衡
参考:http://www.cnblogs.com/fly_binbin/p/3881207.html 反向代理负载均衡 (Apache2+Tomcat7/8) 使用代理服务器可以将请求转发给内部的 ...
- JavaScript入门经典(第7版)读书笔记
断断续续看了十来天,终于看完了,还是学到些东西,这本书还是不错的,各方面都有涉及. 补充了下之前不完善的JS 知识 笔记一般只记必要的东西. Table of Contents 1. JavaScr ...
- Java多线程-CountDownLatch、CyclicBarrier、Semaphore
上次简单了解了多线程中锁的类型,今天要简单了解下多线程并发控制的一些工具类了. 1. 概念说明: CountDownLatch:相当于一个待执行线程计数器,当计数减为零时表示所有待执行线程都已执行完毕 ...
- jsoup爬虫实战心得
1.heder很重要,一切尽在header中.尤其cookie,useragent. 2.对于加密的连接,查看js加密过程并试着通过java或你正在使用的语言去实现 3.查看在跳转之前前端发起的关键请 ...
- (Codeforce)Correct Solution?
One cold winter evening Alice and her older brother Bob was sitting at home near the fireplace and g ...
- tap事件封装
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8 ...
- 基于Docker的Mysql主从复制
基于Docker的Mysql主从复制搭建 为什么基于Docker搭建? 资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相 ...