jiazx0107@163.com
2023-10-25 dfb8e7111399231421ffa13b3c060de2283df5e1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.fzzy.gateway.sc2023.websocket;
 
import lombok.extern.slf4j.Slf4j;
 
import org.springframework.stereotype.Component;
 
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
 
import java.util.HashMap;
import java.util.Map;
 
/**
 *
 */
@Slf4j
@Component
@ServerEndpoint(value = "/mqtt")
public class WebSocketMqtt {
 
    private static Map<String, Session> sessionPool = new HashMap<>();
 
    // 与某个客户端的连接会话,需要通过它来给客户端发送数据
    private Session session;
    private String key;
    
    
    @OnOpen
    public void onOpen(Session session,
                       @PathParam("keepalive") String keepalive,
                       @PathParam("clientId") String clientId,
                       @PathParam("protocolId") String protocolId,
                       @PathParam("protocolVersion") String protocolVersion,
                       @PathParam("clean") String clean,
                       @PathParam("reconnectPeriod") String reconnectPeriod,
                       @PathParam("reconnectTimeout") String reconnectTimeout
    ) throws Exception {
 
        this.session = session;
 
        key = clientId;
 
        sessionPool.put(key, session);
 
 
        log.info("new webSocket,clientId={}", key);
    }
 
    @OnClose
    public void onClose() {
 
        sessionPool.remove(key);
 
        log.info("WebSocket连接关闭={}", key);
 
    }
 
    /**
     * 收到前端发送的信息
     *
     * @param message
     * @param session
     */
    @OnMessage
    public void onMessage(String message, Session session) {
 
        log.info("来自客户端信息:\n" + message);
    }
 
    @OnError
    public void onError(Session session, Throwable error) {
        log.error("发生错误");
 
        sessionPool.remove(key);
 
        error.printStackTrace();
    }
 
}