点击上方“码农沉思录”
发现更多精彩
SpringBoot集成websocket的四种方式
原生注解
pom.xml
<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-websocketartifactId>dependency>
WebSocketConfig
/*
* *
* * blog.coder4j.cn
* * Copyright (C) 2016-2019 All Rights Reserved.
*
*/package cn.coder4j.study.example.websocket.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.socket.config.annotation.EnableWebSocket;import org.springframework.web.socket.server.standard.ServerEndpointExporter;/**
* @author buhao
* @version WebSocketConfig.java, v 0.1 2019-10-18 15:45 buhao
*/@Configuration@EnableWebSocketpublic class WebSocketConfig {
@Beanpublic ServerEndpointExporter serverEndpoint() {
return new ServerEndpointExporter();
}
}
说明:
这个配置类很简单,通过这个配置 spring boot 才能去扫描后面的关于 websocket 的注解WsServerEndpoint
/*
* *
* * blog.coder4j.cn
* * Copyright (C) 2016-2019 All Rights Reserved.
*
*/package cn.coder4j.study.example.websocket.ws;import org.springframework.stereotype.Component;import javax.websocket.OnClose;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;import java.io.IOException;import java.util.HashMap;import java.util.Map;/**
* @author buhao
* @version WsServerEndpoint.java, v 0.1 2019-10-18 16:06 buhao
*/@ServerEndpoint("/myWs")@Componentpublic class WsServerEndpoint {
/**
* 连接成功
*
* @param session
*/@OnOpenpublic void onOpen(Session session) {
System.out.println("连接成功");
}/**
* 连接关闭
*
* @param session
*/@OnClosepublic void onClose(Session session) {
System.out.println("连接关闭");
}/**
* 接收到消息
*
* @param text
*/@OnMessagepublic String onMsg(String text) throws IOException {
return "servet 发送:" + text;
}
}
说明
这里有几个注解需要注意一下,首先是他们的包都在 **javax.websocket **下。并不是 spring 提供的,而 jdk 自带的,下面是他们的具体作用。- @ServerEndpoint
- 通过这个 spring boot 就可以知道你暴露出去的 ws 应用的路径,有点类似我们经常用的@RequestMapping。比如你的启动端口是 8080,而这个注解的值是 ws,那我们就可以通过 ws://127.0.0.1:8080/ws 来连接你的应用
- @OnOpen
- 当 websocket 建立连接成功后会触发这个注解修饰的方法,注意它有一个 Session 参数
- @OnClose
- 当 websocket 建立的连接断开后会触发这个注解修饰的方法,注意它有一个 Session 参数
- @OnMessage
- 当客户端发送消息到服务端时,会触发这个注解修改的方法,它有一个 String 入参表明客户端传入的值
- @OnError
- 当 websocket 建立连接时出现异常会触发这个注解修饰的方法,注意它有一个 Session 参数
Spring 封装
pom.xml
<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-websocketartifactId>dependency>
HttpAuthHandler
/*
* *
* * blog.coder4j.cn
* * Copyright (C) 2016-2019 All Rights Reserved.
*
*/package cn.coder4j.study.example.websocket.handler;import cn.coder4j.study.example.websocket.config.WsSessionManager;import org.springframework.stereotype.Component;import org.springframework.web.socket.CloseStatus;import org.springframework.web.socket.TextMessage;import org.springframework.web.socket.WebSocketSession;import org.springframework.web.socket.handler.TextWebSocketHandler;import java.time.LocalDateTime;/**
* @author buhao
* &#