From b1ff44df4bc71f8f8be7dc913089c910d85d44d0 Mon Sep 17 00:00:00 2001 From: ageerle Date: Tue, 29 Apr 2025 11:44:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20sse=E5=AF=B9=E8=AF=9D=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/ruoyi/chat/listener/SSEEventSourceListener.java | 5 +++-- .../org/ruoyi/chat/service/chat/impl/SseServiceImpl.java | 3 ++- .../src/main/java/org/ruoyi/chat/util/SSEUtil.java | 5 +---- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java index 51d67cf2..f8fd1cf9 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java @@ -12,6 +12,7 @@ import okhttp3.sse.EventSource; import okhttp3.sse.EventSourceListener; import org.jetbrains.annotations.NotNull; import org.ruoyi.chat.service.chat.IChatCostService; +import org.ruoyi.chat.util.SSEUtil; import org.ruoyi.common.chat.entity.chat.ChatCompletionResponse; import org.ruoyi.common.chat.request.ChatRequest; import org.ruoyi.common.core.utils.SpringUtils; @@ -84,10 +85,10 @@ public class SSEEventSourceListener extends EventSourceListener { modelName = completionResponse.getModel(); } stringBuffer.append(content); - emitter.send(content); + emitter.send(data); } } catch (Exception e) { - emitter.completeWithError(e); + log.error(e.getMessage(), e); } } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java index f2965cbc..eb0ae4ed 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java @@ -11,6 +11,7 @@ import org.ruoyi.chat.enums.ChatModeType; import org.ruoyi.chat.service.chat.IChatCostService; import org.ruoyi.chat.service.chat.ISseService; import org.ruoyi.chat.util.IpUtil; +import org.ruoyi.chat.util.SSEUtil; import org.ruoyi.common.chat.config.LocalCache; import org.ruoyi.common.chat.entity.Tts.TextToSpeech; import org.ruoyi.common.chat.entity.chat.ChatCompletion; @@ -88,7 +89,7 @@ public class SseServiceImpl implements ISseService { switchModelAndHandle(chatRequest,sseEmitter); } catch (Exception e) { log.error(e.getMessage(),e); - sseEmitter.completeWithError(e); + SSEUtil.sendErrorEvent(sseEmitter,e.getMessage()); } return sseEmitter; } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/util/SSEUtil.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/util/SSEUtil.java index b429a6cf..0d970cd9 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/util/SSEUtil.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/util/SSEUtil.java @@ -21,11 +21,8 @@ public class SSEUtil { * @param errorMessage 错误信息 */ public static void sendErrorEvent(ResponseBodyEmitter sseEmitter, String errorMessage) { - SseEmitter.SseEventBuilder event = SseEmitter.event() - .name("error") - .data(errorMessage); try { - sseEmitter.send(event); + sseEmitter.send(errorMessage); } catch (IOException e) { log.error("SSE发送失败: {}", e.getMessage()); }