TangCheng
2025-04-17 b611c6cbdd623cd2e2a12d9aebbb35f80fb40590
支持websocket
已删除1个文件
已修改2个文件
已添加1个文件
96 ■■■■■ 文件已修改
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTJavaAIControl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTWebsocketControl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/web/SMTWebSocketConfig.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/web/SMTWebSocketHandler.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTJavaAIControl.java
@@ -1428,6 +1428,9 @@
        Json jsonArgs = tranReq.convParamToJson("args", false);
        SMTQwenAgent agent = SMTAIServerApp.getApp().getQwenAgentManager().getAgentById(agentId);
        
        if(agent == null)
            throw new Exception("can't find agent : " + agentId);
        SMTLLMConnect llm = SMTAIServerApp.getApp().allocLLMConnect(null);
        
        if(jsonArgs == null)
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTWebsocketControl.java
ÎļþÒÑɾ³ý
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/web/SMTWebSocketConfig.java
@@ -1,30 +1,26 @@
package com.smtaiserver.smtaiserver.web;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
@Configuration
@EnableWebSocketMessageBroker
public class SMTWebSocketConfig implements WebSocketMessageBrokerConfigurer
@EnableWebSocket
public class SMTWebSocketConfig implements WebSocketConfigurer
{
    @Override
    public void configureMessageBroker(MessageBrokerRegistry config)
    {
        // è®¾ç½®æ¶ˆæ¯ä»£ç†çš„前缀,即如果消息的前缀是"/topic",就会将消息转发给消息代理(broker)
        // å†ç”±æ¶ˆæ¯ä»£ç†å°†æ¶ˆæ¯å¹¿æ’­ç»™å½“前连接的客户端
        config.enableSimpleBroker("/topic");
        // é…ç½®ä¸€ä¸ªæˆ–多个前缀,通过这些前缀过滤出需要被注解方法处理的消息
        // ä¾‹å¦‚"/app"前缀的destination可以通过@MessageMapping注解的方法处理
        config.setApplicationDestinationPrefixes("/app");
    @Bean
    public TextWebSocketHandler webSocketHandler() {
        return new SMTWebSocketHandler();
    }
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // å®šä¹‰ä¸€ä¸ªå‰ç¼€ä¸º"/ws"的endpoint,并开启sockjs支持
        // sockjs可以解决浏览器对WebSocket的兼容性问题
        registry.addEndpoint("/ws").withSockJS();
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
         registry.addHandler(webSocketHandler(), "/ws")
             .addInterceptors(new HttpSessionHandshakeInterceptor())
             .setAllowedOrigins("*");
    }
}
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/web/SMTWebSocketHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.smtaiserver.smtaiserver.web;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
public class SMTWebSocketHandler extends TextWebSocketHandler {
    private final Set<WebSocketSession> sessions = Collections.synchronizedSet(new HashSet<>());
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        sessions.add(session);
        System.out.println("Client connected: " + session.getId());
    }
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String payload = message.getPayload();
        System.out.println("Received message from " + session.getId() + ": " + payload);
        // Broadcast message to all connected clients
        for (WebSocketSession s : sessions) {
            if (s.isOpen()) {
                s.sendMessage(new TextMessage(payload));
            }
        }
    }
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        sessions.remove(session);
        System.out.println("Client disconnected: " + session.getId());
    }
}