首页 > 其他分享 >WebSocked

WebSocked

时间:2024-06-01 10:11:26浏览次数:17  
标签:session param Session WebSocked sid 注解 public

 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。

标签:session,param,Session,WebSocked,sid,注解,public
From: https://www.cnblogs.com/linzepro/p/18225602

相关文章