1
+ package cn .ruiyeclub .socket ;
2
+
3
+ import lombok .extern .slf4j .Slf4j ;
4
+ import org .java_websocket .handshake .ServerHandshake ;
5
+ import org .springframework .stereotype .Component ;
6
+ import org .springframework .web .socket .TextMessage ;
7
+ import org .springframework .web .socket .WebSocketSession ;
8
+
9
+ import java .io .IOException ;
10
+ import java .net .URI ;
11
+ import java .net .URISyntaxException ;
12
+ import java .util .concurrent .ConcurrentHashMap ;
13
+
14
+ @ Slf4j
15
+ @ Component
16
+ public class WebSocketClient {
17
+
18
+ /**
19
+ * 持久化客户端
20
+ */
21
+ private static ConcurrentHashMap <String , org .java_websocket .client .WebSocketClient > websockets = new ConcurrentHashMap <>();
22
+ /**
23
+ * socket实例化
24
+ */
25
+ private org .java_websocket .client .WebSocketClient webSocketClient ;
26
+
27
+
28
+ public void send (String msg , WebSocketSession session ) {
29
+ String id = session .getId ();
30
+ // System.out.println(id);
31
+ org .java_websocket .client .WebSocketClient webSocketClient1 = websockets .get (id );
32
+ if (webSocketClient1 == null ) {
33
+ connect (session );
34
+ } else {
35
+ log .info ("二次连接" );
36
+ webSocketClient = webSocketClient1 ;
37
+ this .sendMessage (msg );
38
+ }
39
+ // sendMessage(msg);
40
+ }
41
+
42
+
43
+ public void connect (WebSocketSession session ) {
44
+ try {
45
+ URI uri = new URI ("wss://streaming.forexpros.com/echo/687/dwo1lpgc/websocket" );
46
+ webSocketClient = new org .java_websocket .client .WebSocketClient (uri ) {
47
+ @ Override
48
+ public void onOpen (ServerHandshake handshake ) {
49
+ log .info ("Connected to WebSocket server" );
50
+ }
51
+
52
+ @ Override
53
+ public void onMessage (String message ) {
54
+ log .info ("Received message: " + message );
55
+ // 在这里处理接收到的消息
56
+ try {
57
+ session .sendMessage (new TextMessage (message ));
58
+ } catch (IOException e ) {
59
+ throw new RuntimeException (e );
60
+ }
61
+ }
62
+
63
+ @ Override
64
+ public void onClose (int code , String reason , boolean remote ) {
65
+ log .info ("Disconnected from WebSocket server with exit code " + code + " additional info: " + reason );
66
+ }
67
+
68
+ @ Override
69
+ public void onError (Exception ex ) {
70
+ log .error ("An error occurred:" , ex );
71
+ }
72
+ };
73
+ webSocketClient .connect ();
74
+ websockets .put (session .getId (), webSocketClient );
75
+ log .info ("当前用户id: {}" , session .getId ());
76
+ log .info ("当前客户端人数: {}" , websockets .size ());
77
+
78
+ // 发送请求给服务端
79
+ // while (true) {
80
+ // Thread.sleep(3000);
81
+ // // 自定义事件`push_data_event` -> 向服务端发送消息
82
+ // sendMessage("[\"{ \\\"_event\\\": \\\"heartbeat\\\", \\\"data\\\": \\\"h\\\"}\"]");
83
+ // }
84
+ // sendMessage(msg);
85
+ } catch (URISyntaxException e ) {
86
+ log .error ("Error connecting to WebSocket server" , e );
87
+ }
88
+ }
89
+
90
+ public void disconnect () {
91
+ if (webSocketClient != null ) {
92
+ webSocketClient .close ();
93
+ }
94
+ }
95
+
96
+ public void sendMessage (String message ) {
97
+ if (webSocketClient != null && webSocketClient .isOpen ()) {
98
+ webSocketClient .send (message );
99
+ } else {
100
+ log .warn ("WebSocket is not connected." );
101
+ }
102
+ }
103
+
104
+ }
0 commit comments