SpringBoot集成WebSocket
1.基本封装使用
(1)导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
(2)配置类
@EnableWebSocket//开始websocket能力
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
(3)封装WebSocket服务端,对应4个监听事件。
@ServerEndpoint和@Controller不一样
@ServerEndpoint标注WebSocketServer是非单例的。一个客户端连接过来对应一个WebSocketServer对象
@Controller是单实例的,一个客户端连接过来对应一个线程
@ServerEndpoint("/v1/socket/{sid}")
@Component
public class WebSocketServer {
//对应前端连接事件
@OnOpen
void open()
//发送消息给前端
@OnMessage
void messge(@PathParam("sid")String sid)
@OnClose
void close()
@OnError
void error()
}
2.@ServerEnpoint注解
(1)@ServerEndpoint 不能注入 @Autowired问题解析
本质原因:spring管理的都是单例(singleton)和 websocket (多对象)相冲突。因为WebSocket 是一个多例,因为你需要多个对象来保存链接,所以就和单例无缘了,然而我们交给Spring管理的是单例的东西,那么我们可以从这里知道,WebSocket的对象是不能交给Spring管理的,此时我们有两种解决方案;
是单例的东西,那么我们可以从这里知道,WebSocket的对象是不能交给Spring管理的,此时我们有两种解决方案;
- 从ApplicationContext上下文中获取