1、pom文件,添加一个依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2、springBoot整合socket,有两种使用方式,一个是H5,一种是SockJS,目前只提供H5的两种使用方式,后续再补SockJS的
第一种 基于@ServerEndpoint注解的方式
- 注入ServerEndpointExporter类到bean容器,该类会获取bean容器中所有带@ServerEndpoint注解的类,当成WebSocket处理类
@Configuration public class ZJWebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }
ServerEndpointExporter部分源码
- 编写处理类,并添加@ServerEndpoint,注意该类必须加入bean容器
@ServerEndpoint("/reverse") @Component public class ReverseWebSocketEndpoint { private static Logger log = LoggerFactory.getLogger(ReverseWebSocketEndpoint.class); /** * @param session * @return * @throws IOException * @Description: */ @OnOpen public void onOpen(Session session) { log.info("----->>>>in ReverseWebSocketEndpoint. execute onOpen method ,session id is " + session.getId()); } /** * @param session * @throws IOException * @Description: */ @OnClose public void onClose(Session session) { log.info("----->>>>in ReverseWebSocketEndpoint. execute onClose method ,session id is " + session.getId()); } /** * 消息处理 * * @param session * @param message * @throws IOException * @Description: */ @OnMessage public void handleMessage(Session session, String message) throws IOException { session.getBasicRemote().sendText("Reversed: " + new StringBuilder(message).reverse()); } }
第二种 使用handle类处理
- 编写类实现WebSocketConfigurer接口,指定handle类和拦截路径
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
/**
* 注册websocket处理,
*/
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(websocketHandler(), "/websocket")
.addInterceptors(new WebSocketInterceptors())
.setAllowedOrigins("*");
}
/**
* 声明websocket处理类
*
* @return
* @Description:
*/
@Bean
public WebsocketHandler websocketHandler() {
return new WebsocketHandler();
}
}
- 编写handle类
public class WebsocketHandler extends TextWebSocketHandler { protected static final Logger log = LoggerFactory.getLogger(WebsocketHandler.class); /** * 连接后处理,等同OnOpen */ @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { log.info("----->>>>in WebsocketHandler. execute afterConnectionEstablished method ,session id is " + session.getId()); } /** * 断开连接处理,等同OnClose */ @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { log.info( "----->>>>in WebsocketHandler. execute afterConnectionClosed method ,session id is " + session.getId()); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { log.info("----->>>>in WebsocketHandler. execute handleTextMessage method ,session id is " + session.getId()); String reversed = "Reversed: " + new StringBuilder(message.getPayload()).reverse(); session.sendMessage(new TextMessage(reversed)); } @Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception { super.handleMessage(session, message); } /** * 异常处理 */ @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { super.handleTransportError(session, exception); } }