SpringBoot + websocket 定时任务完成实时数据(加密)推送前端

一、业务场景

登录数,与游客数,实时推送至前端,完成看板统计功能的页面动态展示

二、实现步骤

1.websocket

完成实时推送我使用的是websocket.
每当使用SpringBoot进行Weboscket开发时,最容易想到的就是spring-boot-starter-websocket(或spring-websocket)。它可以让我们使用注解,很简单的进行Websocket开发,让我们更多的关注业务逻辑。它底层使用的是Tomcat,且不说把整个Tomcat放进一个WebSocket服务中是否会太重,但在大数据量高并发的场景下,它的表现并不是非常理想。

Netty一款高性能的NIO网络编程框架,在推送量激增时,表现依然出色。(关于性能与表现的讨论,网上很多,这里不过多说明。)很多流行开源项目都在使用Netty,如:Dubbo、Storm、Spark、Elasticsearch、Apache Cassandra等,这得益于Netty的并发高、传输快、封装好等特点。

但是,要在SpringBoot项目中整合Netty来开发WebSocket不是一件舒服的事,这会让你过多的关注非业务逻辑的实现。那么,是否有一款框架,能使得在SpringBoot项目中使用Netty开发WebSocket变得简单,甚至优雅,并且可以从使用spring-boot-starter-websocket开发的项目无缝的迁移过来呢?

netty-websocket-spring-boot-starter

这是个开源的框架。通过它,我们可以像spring-boot-starter-websocket一样使用注解进行开发,只需关注需要的事件(如OnMessage)。并且底层是使用Netty,当需要调参的时候只需要修改配置参数即可,无需过多的关心handler的设置。

添加依赖

2.SpringBoot定时任务(基于注解(@Scheduled))

基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。

1.创建定时器

3.传输加密

websocket一般在传输过程中加密,我采用的是Aes加密方法,具体加密代码请移步:

后台Java代码

依赖的maven包

前端js代码

4.代码分析

 

0

SpringBoot + websocket 实现模拟设备上下线

之前有做过车联网项目,gps设备都会有上下线检测的功能,但有的时候没有真实设备测试,如何模拟设备上下线呢?可以使用websocket实现,因为它是长连接,性能开销小且通信高效。

下面就直接上代码

pom.xml

DemoApplication.java

WebSocketServer.java

WebSocketConfig.java

application.properties

启动springboot,这时就可以在客户端模拟调用了,就是这个地址

123456789是设备id

问题总结

1.WebSocketServer里是无法通过@autowired或者@resource注入bean的

2.如果是打包成war到外部tomcat运行,则不需要WebSocketConfig.java这个配置类

0