实战对比:Python中五大主流库求解非线性方程组的性能与策略
2026/6/19 13:22:47
SpringBoot集成WebSocket
在 Spring Boot 中集成 WebSocket 可以实现服务器与客户端之间的双向通信,常用于实时消息推送、聊天室、在线通知等场景。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>importorg.springframework.context.annotation.Configuration;importorg.springframework.web.socket.config.annotation.EnableWebSocket;importorg.springframework.web.socket.config.annotation.WebSocketConfigurer;importorg.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;@Configuration@EnableWebSocketpublicclassWebSocketConfigimplementsWebSocketConfigurer{@OverridepublicvoidregisterWebSocketHandlers(WebSocketHandlerRegistryregistry){// 注册处理器,允许跨域访问registry.addHandler(myWebSocketHandler(),"/websocket").setAllowedOrigins("*");// 生产环境应限制具体域名}publicMyWebSocketHandlermyWebSocketHandler(){returnnewMyWebSocketHandler();}}importorg.springframework.web.socket.CloseStatus;importorg.springframework.web.socket.TextMessage;importorg.springframework.web/socket.WebSocketSession;importorg.springframework.web.socket.handler.TextWebSocketHandler;importjava.util.concurrent.ConcurrentHashMap;publicclassMyWebSocketHandlerextendsTextWebSocketHandler{// 存储所有连接的会话privatestaticfinalConcurrentHashMap<String,WebSocketSession>sessions=newConcurrentHashMap<>();@OverridepublicvoidafterConnectionEstablished(WebSocketSessionsession)throwsException{sessions.put(session.getId(),session);System.out.println("新连接: "+session.getId());}@OverrideprotectedvoidhandleTextMessage(WebSocketSessionsession,TextMessagemessage)throwsException{Stringpayload=message.getPayload();System.out.println("收到消息: "+payload);// 广播给所有连接的客户端for(WebSocketSessions:sessions.values()){if(s.isOpen()){s.sendMessage(newTextMessage("Echo: "+payload));}}}@OverridepublicvoidafterConnectionClosed(WebSocketSessionsession,CloseStatusstatus)throwsException{sessions.remove(session.getId());System.out.println("连接关闭: "+session.getId());}@OverridepublicvoidhandleTransportError(WebSocketSessionsession,Throwableexception)throwsException{sessions.remove(session.getId());session.close(CloseStatus.SERVER_ERROR);System.out.println("连接异常: "+session.getId());}}<!DOCTYPEhtml><html><head><title>WebSocket 测试</title></head><body><inputtype="text"id="message"placeholder="输入消息"><buttononclick="sendMessage()">发送</button><divid="output"></div><script>constws=newWebSocket('ws://localhost:8080/websocket');ws.onopen=function(event){console.log('连接已建立');};ws.onmessage=function(event){document.getElementById('output').innerHTML+='<p>'+event.data+'</p>';};ws.onclose=function(event){console.log('连接已关闭');};functionsendMessage(){constmsg=document.getElementById('message').value;ws.send(msg);}</script></body></html>importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassWebsocketApplication{publicstaticvoidmain(String[]args){SpringApplication.run(WebsocketApplication.class,args);}}如果你需要更复杂的协议(如订阅/发布、路径匹配、安全认证等),可以考虑使用STOMP协议,Spring Boot 对其有良好支持。
setAllowedOrigins("*")在生产环境中应替换为具体的可信域名。如需基于注解(@ServerEndpoint)的方式(使用原生 Java EE WebSocket API),也可以配合spring-boot-starter-websocket使用,但 Spring 推荐使用WebSocketHandler或 STOMP 方式。
本文的引用仅限自我学习如有侵权,请联系作者删除。
参考知识