SpringBoot整合websocket
2023-12-15 08:41:18
使用SpringBoot整合websocket,构建websocket通信工程
1.什么是websocket
WebSocket 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯,它建立在 TCP 之上,同 HTTP 一样通过 TCP 来传输数据,但是它和 HTTP 最大不同是:
?
- WebSocket 是一种双向通信协议,在建立连接后,WebSocket 服务器和 Browser/Client Agent 都能主动的向对方发送或接收数据,就像 Socket 一样;
- WebSocket 需要类似 TCP 的客户端和服务器端通过握手连接,连接成功后才能相互通信。
2.如何引入websocket
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
3.编写websocket配置类
@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
注解实例。
- 使用内置Tomcat容器部署,必须用
@Bean
注入ServerEndpointExporter
。 - 使用外置容器部署war包,不需要使用
@Bean
注入ServerEndpointExporter
。
registerWebSocketHandlers是将Handle绑定在某个 URL 上,或者说监听某个 URL。也就是在spring容器中注册一个handler地址,后续会配置这个handler,实现具体逻辑。
onStartup函数是为了配置websocket的传输数据大小,默认为8k。
4.编写handler
@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传输错误的回调函数。当发生传输错误时,例如网络断开等情况,该函数会被调用。在该函数中,你可以记录错误信息或进行相应的错误处理。
文章来源:https://blog.csdn.net/gzu_01/article/details/134944618
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!