前言
在一次项目开发中,使用到了Netty网络应用框架,以及MQTT进行消息数据的收发,这其中需要后台来将获取到的消息主动推送给前端,于是就使用到了MQTT,特此记录一下。
一、什么是websocket?
为什么不使用HTTP 协议呢?这是因为HTTP是单工通信,通信只能由客户端发起,客户端请求一下,服务器处理一下,这就太麻烦了。于是websocket应运而生。
下面我们就直接开始使用Springboot开始整合。以下案例都在我自己的电脑上测试成功,你可以根据自己的功能进行修改即可。
我的项目结构如下:
二、使用步骤
1.添加依赖
1 | xml复制代码<dependency> |
2.启用Springboot对WebSocket的支持
启用WebSocket的支持也是很简单,几句代码搞定:
1 | java复制代码import org.springframework.context.annotation.Bean; |
3.核心配置:WebSocketServer
因为WebSocket是类似客户端服务端的形式(采用ws协议),那么这里的WebSocketServer其实就相当于一个ws协议的Controller
- @ ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端, 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
- 新建一个ConcurrentHashMap webSocketMap 用于接收当前userId的WebSocket,方便传递之间对userId进行推送消息。
下面是具体业务代码:
1 | java复制代码@Component |
4.测试Controller
1 | java复制代码@Controller("web_Scoket_system") |
5.测试页面index.html
1 | html复制代码<!DOCTYPE html> |
6.结果展示
后台,如果有连接请求
前台显示
总结
这中间我遇到一个问题,就是说WebSocket启动的时候优先于spring容器,从而导致在WebSocketServer中调用业务Service会报空指针异常,所以需要在WebSocketServer中将所需要用到的service给静态初始化一下,如图所示:
还需要做如下配置:
本文转载自: 掘金