From 79fe209d4f0d333497621e6fe9f1ff40255e2cf3 Mon Sep 17 00:00:00 2001 From: Administrator Date: Mon, 20 Oct 2025 22:06:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Session=20id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vetti/socket/ChatWebSocketHandler.java | 81 +++---------------- 1 file changed, 9 insertions(+), 72 deletions(-) diff --git a/vetti-admin/src/main/java/com/vetti/socket/ChatWebSocketHandler.java b/vetti-admin/src/main/java/com/vetti/socket/ChatWebSocketHandler.java index e0a9321..7f55f57 100644 --- a/vetti-admin/src/main/java/com/vetti/socket/ChatWebSocketHandler.java +++ b/vetti-admin/src/main/java/com/vetti/socket/ChatWebSocketHandler.java @@ -68,12 +68,6 @@ public class ChatWebSocketHandler { */ private final Map cacheWebSocket = new ConcurrentHashMap<>(); - /** - * 为每个会话维护分片缓存(线程安全,支持多用户) - */ - private final ConcurrentHashMap> fragmentCache = new ConcurrentHashMap<>(); - - // 语音文件保存目录 private static final String VOICE_STORAGE_DIR = "/voice_files/"; @@ -98,6 +92,7 @@ public class ChatWebSocketHandler { @OnOpen public void onOpen(Session session, @PathParam("clientId") String clientId) { log.info("WebSocket 链接已建立:{}", clientId); + log.info("WebSocket session 链接已建立:{}", session.getId()); cacheClientTts.put(clientId,new String()); //初始化STT流式语音转换文本的socket链接 createWhisperRealtimeSocket(clientId); @@ -116,26 +111,14 @@ public class ChatWebSocketHandler { if("done".equals(resultFlag)){ log.info("1、开始处理时间:{}",System.currentTimeMillis()/1000); // //开始合并语音流 -// List fragments = fragmentCache.get(clientId); -// // 合并所有分片为完整语音数据 -// byte[] fullVoiceData = mergeFragments(fragments); -// // 生成唯一文件名 -// String fileName = clientId + "_" + System.currentTimeMillis() + ".webm"; -// String pathUrl = RuoYiConfig.getProfile()+VOICE_STORAGE_DIR + fileName; -// log.info("文件路径为:{}", pathUrl); -// log.info("文件流的大小为:{}",fullVoiceData.length); -// saveAsWebM(fullVoiceData,pathUrl); -// //开始转换 -// WhisperClient whisperClient = SpringUtils.getBean(WhisperClient.class); -// String cacheResultText = whisperClient.handleVoiceToText(pathUrl); - //发送消息 WebSocket webSocket = cacheWebSocket.get(clientId); + if(webSocket != null){ + + } webSocket.send("{\"type\": \"input_audio_buffer.commit\"}"); webSocket.send("{\"type\": \"response.create\"}"); -// if(webSocket != null){ -// webSocket.close(1000,null); -// } + //语音结束,开始进行回答解析 String cacheResultText = cacheClientTts.get(clientId); log.info("返回的结果为:{}",cacheResultText); @@ -247,30 +230,14 @@ public class ChatWebSocketHandler { } - // 接收二进制消息(流数据) -// @OnMessage -// public void onBinaryMessage(Session session, @PathParam("clientId") String clientId, ByteBuffer byteBuffer) { -// log.info("1、开始接收数据流时间:{}",System.currentTimeMillis()/1000); -// log.info("客户端ID为:{}", clientId); -// // 处理二进制流数据 -// byte[] bytes = new byte[byteBuffer.remaining()]; -// //从缓冲区中读取数据并存储到指定的字节数组中 -// byteBuffer.get(bytes); -// -// // 1. 获取当前会话的缓存 -// List fragments = fragmentCache.get(clientId); -// if (fragments == null) { -// fragments = new ArrayList<>(); -// fragmentCache.put(clientId, fragments); -// } -// fragments.add(bytes); -// fragmentCache.put(clientId, fragments); -// } - // 连接关闭时调用 @OnClose public void onClose(Session session, CloseReason reason) { System.out.println("WebSocket连接已关闭: " + session.getId() + ", 原因: " + reason.getReasonPhrase()); +// WebSocket webSocket = cacheWebSocket.get(clientId); +// if(webSocket != null){ +// webSocket.close(1000,null); +// } } // 发生错误时调用 @@ -293,17 +260,10 @@ public class ChatWebSocketHandler { System.err.println("字节数组为空,无法生成WebM文件"); return false; } - if (filePath == null || filePath.trim().isEmpty()) { System.err.println("文件路径不能为空"); return false; } - - // 确保文件以.webm结尾 -// if (!filePath.toLowerCase().endsWith(".webm")) { -// filePath += ".webm"; -// } - FileOutputStream fos = null; try { fos = new FileOutputStream(filePath); @@ -349,7 +309,6 @@ public class ChatWebSocketHandler { private void createWhisperRealtimeSocket(String clientId){ try{ OkHttpClient client = new OkHttpClient(); -// CountDownLatch latch = new CountDownLatch(1); // 设置 WebSocket 请求 Request request = new Request.Builder() .url(API_URL) @@ -419,33 +378,11 @@ public class ChatWebSocketHandler { // latch.countDown(); } }); - // 等待 WebSocket 关闭 -// latch.await(); }catch (Exception e){ e.printStackTrace(); } } - - /** - * 合并分片数组为完整字节数组 - */ - private byte[] mergeFragments(List fragments) { - // 计算总长度 - int totalLength = 0; - for (byte[] fragment : fragments) { - totalLength += fragment.length; - } - // 拼接所有分片 - byte[] result = new byte[totalLength]; - int offset = 0; - for (byte[] fragment : fragments) { - System.arraycopy(fragment, 0, result, offset, fragment.length); - offset += fragment.length; - } - return result; - } - /** * 语音流文件格式转换 * @param pathUrl