SpringBoot中使用WebSocket的方法
1.基本概念
所谓WebSocket, 类似于Socket,它的作用是可以让Web应用中的客户端和服务端建立全双工通信。在基于Spring的应用中使用WebSocket一般可以有以下三种方式:
使用Java提供的@ServerEndpoint注解实现
使用Spring提供的低层级WebSocket API实现
使用STOMP消息实现
2.使用Spring提供的低层级WebSocket API实现
概念 Spring 4.0为WebSocket通信提供了支持,包括:
发送和接收消息的低层级API;
发送和接收消息的高级API;
用来发送消息的模板;
支持SockJS,用来解决浏览器端、服务器以及代理不支持WebSocket的问题。
使用步骤
1.添加一个WebSocketHandler 【面试|SpringBoot中使用WebSocket的方法】定义一个继承了AbstractWebSocketHandler类的消息处理类,然后自定义对”建立连接“、”接收/发送消息“、”异常情况“等情况进行处理
package cn.zifangsky.samplewebsocket.websocket;
import cn.zifangsky.samplewebsocket.service.EchoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 javax.annotation.Resource;
import java.text.MessageFormat;
/**
* 通过继承 {@link org.springframework.web.socket.handler.AbstractWebSocketHandler} 的示例
*/
public class EchoWebSocketHandler extends TextWebSocketHandler{
private final Logger logger = LoggerFactory.getLogger(getClass());
@Resource(name = "echoServiceImpl")
private EchoService echoService;
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
logger.debug("Opened new session in instance " + this);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
//组装返回的Echo信息
String echoMessage = this.echoService.echo(message.getPayload());
logger.debug(MessageFormat.format("Echo message \"{0}\"", echoMessage));
session.sendMessage(new TextMessage(echoMessage));
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
session.close(CloseStatus.SERVER_ERROR);
logger.debug("Info: WebSocket connection closed.");
}
}
2.WebSocket相关配置
package cn.zifangsky.samplewebsocket.config;
import cn.zifangsky.samplewebsocket.websocket.EchoWebSocketHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
/**
* WebSocket相关配置
*/
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer{
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(echoWebSocketHandler(), "/echoMessage");
registry.addHandler(echoWebSocketHandler(), "/echoMessage_SockJS").withSockJS();
}
/**
* 通过继承 {@link org.springframework.web.socket.handler.AbstractWebSocketHandler} 的示例
*/
@Bean
public WebSocketHandler echoWebSocketHandler(){
return new EchoWebSocketHandler();
}
}
推荐阅读
- java|Java使用jsoup爬取网页数据
- ibatis|ibatis 数据增删改查一日一表的情况
- 面试|前端面试内容1
- Java 初识篇-【笔记一】
- springboot|Springboot+Vue+Element实现的CRM管理系统
- java进阶-框架篇|springboot + VUE实现后台管理系统(集成JWT接口权限验证)
- java|多级分类、菜单等的数据库设计(一张表),以及mybatis-plus的多级分类查询(一条SQL语句)
- springboot博客系统|SpringBoot+Vue快速搭建简单个人博客系统之后端
- SpringBoot教学|如何快速使用SpringBoot+Vue前后端分离实现echarts图形可视化(入门详细教程)