Browse Source

使用原生ws

master
白凤吉 6 months ago
parent
commit
6a03569f3c
  1. 1
      build.gradle
  2. 14
      src/main/java/com/qyft/gd/config/WebSocketConfig.java
  3. 2
      src/main/java/com/qyft/gd/service/CMDService.java
  4. 51
      src/main/java/com/qyft/gd/service/WebSocketServer.java

1
build.gradle

@ -38,6 +38,7 @@ dependencies {
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.12.6'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.12.6'
implementation group: 'com.alibaba', name: 'fastjson', version: '2.0.54'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-websocket', version: '3.4.2'
implementation group: 'io.netty', name: 'netty-all', version: '4.1.117.Final'
//++++++++++++++++

14
src/main/java/com/qyft/gd/config/WebSocketConfig.java

@ -0,0 +1,14 @@
package com.qyft.gd.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}

2
src/main/java/com/qyft/gd/service/CMDService.java

@ -1,5 +1,6 @@
package com.qyft.gd.service;
import cn.hutool.json.JSONUtil;
import com.qyft.gd.common.constant.Commands;
import com.qyft.gd.common.result.CMDResultCode;
import com.qyft.gd.device.service.DeviceService;
@ -32,6 +33,7 @@ public class CMDService {
executionResult.setCommandId(cmdForm.getCommandId());
executionResult.setStatus(CMDResultCode.SUCCESS.getCode());
executionResult.setMessage(CMDResultCode.SUCCESS.getMsg());
WebSocketServer.sendMessageToClients(JSONUtil.toJsonStr(executionResult));
}
}

51
src/main/java/com/qyft/gd/service/WebSocketServer.java

@ -0,0 +1,51 @@
package com.qyft.gd.service;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@ServerEndpoint("/ws")
@Component
public class WebSocketServer {
private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<>());
@OnOpen
public void onOpen(Session session) {
sessions.add(session);
}
@OnMessage
public void onMessage(String message, Session session) {
}
@OnClose
public void onClose(Session session) {
sessions.remove(session); // 移除关闭连接的 Session
}
@OnError
public void onError(Throwable error) {
}
public static void sendMessageToClients(String message) {
synchronized (sessions) {
for (Session session : sessions) {
try {
session.getBasicRemote().sendText(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
Loading…
Cancel
Save