使用SpringBoot整合websocket,构建websocket通信工程
WebSocket 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯,它建立在 TCP 之上,同 HTTP 一样通过 TCP 来传输数据,但是它和 HTTP 最大不同是:
?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
@Component
@EnableWebSocket
public class WebSoketConfig implements WebSocketConfigurer, ServletContextInitializer {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler( new TestWebSocketHandler(), "/test").setAllowedOrigins("*");
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addListener(WebAppRootListener.class);
servletContext.setInitParameter("org.apache.tomcat.websocket.textBufferSize","131072");//128KB
servletContext.setInitParameter("org.apache.tomcat.websocket.binaryBufferSize","131072");//128KB
}
}
其中,ServerEndpointExporter
是Spring官方提供的标准实现,用于扫描ServerEndpointConfig
配置类和ServerEndpoint
注解实例。
@Bean
注入ServerEndpointExporter
。@Bean
注入ServerEndpointExporter
。registerWebSocketHandlers是将Handle绑定在某个 URL 上,或者说监听某个 URL。也就是在spring容器中注册一个handler地址,后续会配置这个handler,实现具体逻辑。
onStartup函数是为了配置websocket的传输数据大小,默认为8k。
@Component
@Slf4j
public class TestWebSocketHandler extends TextWebSocketHandler {
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
log.info("WebSocket连接已建立: ");
}
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
//业务逻辑
session.sendMessage(new TextMessage("Hello"));
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
System.out.println("WebSocket连接已关闭");
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
log.error("WebSocket错误: " + exception);
}
}
当客户端与WebSocket服务器建立连接时,会调用afterConnectionEstablished
函数。该函数在连接建立后被执行,你可以在这里进行一些初始化操作或记录连接信息。
handleTextMessage
函数用于处理客户端发送的文本消息。当收到客户端发送的消息时,该函数会被调用。
afterConnectionClosed
函数在WebSocket连接关闭后被调用。在该函数中,你可以进行一些资源释放或记录连接关闭信息的操作。
handleTransportError
函数是处理WebSocket传输错误的回调函数。当发生传输错误时,例如网络断开等情况,该函数会被调用。在该函数中,你可以记录错误信息或进行相应的错误处理。