1 @Slf4j 2 @Component 3 @ServerEndpoint("/ws/{sid}") 4 public class WebSocketServer { 5 6 private static Map<String,Session> sessionMap = new HashMap<>(); 7 8 /** 9 * 连接建立时触发 10 * @param session 11 * @param sid 12 */ 13 @OnOpen 14 public void onOpen(Session session , @PathParam("sid") String sid){ 15 log.info("有客户端连接到了服务器 , {}", sid); 16 sessionMap.put(sid, session); 17 } 18 19 /** 20 * 服务端接收到消息时触发 21 * @param session 22 * @param message 23 * @param sid 24 */ 25 @OnMessage 26 public void onMessage(Session session , String message, @PathParam("sid") String sid){ 27 log.info("接收到了客户端 {} 发来的消息 : {}", sid ,message); 28 } 29 30 /** 31 * 连接关闭时触发 32 * @param session 33 * @param sid 34 */ 35 @OnClose 36 public void onClose(Session session , @PathParam("sid") String sid){ 37 System.out.println("连接断开:" + sid); 38 sessionMap.remove(sid); 39 } 40 41 /** 42 * 通信发生错误时触发 43 * @param session 44 * @param sid 45 * @param throwable 46 */ 47 @OnError 48 public void one rror(Session session , @PathParam("sid") String sid , Throwable throwable){ 49 System.out.println("出现错误:" + sid); 50 throwable.printStackTrace(); 51 } 52 53 /** 54 * 广播消息 55 * @param message 56 * @throws IOException 57 */ 58 public void sendMessageToAll(String message) throws IOException { 59 Collection<Session> sessions = sessionMap.values(); 60 if(!CollectionUtils.isEmpty(sessions)){ 61 for (Session session : sessions) { 62 //服务器向客户端发送消息 63 session.getBasicRemote().sendText(message); 64 } 65 } 66 } 67 }
该Java类是一个WebSocket服务器,使用@ServerEndpoint注解指定端点路径为/ws/{sid}。类中定义了WebSocket的生命周期回调方法和一个广播消息方法。
@OnOpen注解的方法在连接建立时触发,将客户端的Session和sid存储到sessionMap中。
@OnMessage注解的方法在服务端接收到消息时触发,打印接收到的消息。
@OnClose注解的方法在连接关闭时触发,从sessionMap中移除对应的Session。
@OnError注解的方法在通信发生错误时触发,打印错误信息和堆栈跟踪。
sendMessageToAll方法用于向所有连接的客户端广播消息,遍历sessionMap中的Session并发送消息。
该类还使用了@Slf4j和@Component注解,分别用于日志记录和将类注册为Spring组件。
1 @Configuration 2 public class WebSocketConfig { 3 4 /** 5 * 注册基于@ServerEndpoint声明的Websocket Endpoint 6 * @return 7 */ 8 @Bean 9 public ServerEndpointExporter serverEndpointExporter(){ 10 return new ServerEndpointExporter(); 11 } 12 13 }
该Java函数是一个配置类,用于注册基于@ServerEndpoint声明的Websocket Endpoint。
该函数使用@Configuration注解标记为Spring配置类。
函数使用@Bean注解将ServerEndpointExporter对象注册为Spring Bean。
ServerEndpointExporter类负责扫描并发布使用@ServerEndpoint注解声明的WebSocket端点。
通过该函数,可以在Spring Boot应用中启用并管理WebSocket endpoint。