@@ -601,14 +601,15 @@ private async Task MvcForwardSendData(WebSocket webSocket, HttpContext context,
601601 object invokeResult = await MvcDistributeAsync ( webSocketOption , context , webSocket , request , requestBody , logger , appLifetime ) ;
602602
603603 // 发送结果给客户端
604- //string serialJson = JsonSerializer.Serialize(invokeResult, webSocketOption.DefaultResponseJsonSerializerOptions);
605- //await webSocket.SendAsync(new ArraySegment<byte>(Encoding.UTF8.GetBytes(serialJson)), result.MessageType, result.EndOfMessage, CancellationToken.None);
606-
607- // 序列化响应以获取大小
604+ // 使用统一的SendAsync方法,自动适配单机和集群模式
605+ // Use unified SendAsync method, automatically adapts to single machine or cluster mode
606+ var connectionId = context . Connection . Id ;
607+
608+ // 序列化响应以获取大小(用于统计)
608609 string serialJson = JsonSerializer . Serialize ( invokeResult , webSocketOption . DefaultResponseJsonSerializerOptions ) ;
609610 var responseBytes = Encoding . UTF8 . GetBytes ( serialJson ) ;
610-
611- await invokeResult . SendLocalAsync ( webSocketOption . DefaultResponseJsonSerializerOptions , result . MessageType , timeout : ResponseSendTimeout , encoding : Encoding . UTF8 , sendBufferSize : SendTextBufferSize , socket : webSocket ) . ConfigureAwait ( false ) ;
611+
612+ await WebSocketManager . SendAsync ( connectionId , invokeResult , webSocketOption . DefaultResponseJsonSerializerOptions , Encoding . UTF8 ) . ConfigureAwait ( false ) ;
612613
613614 // 记录消息发送指标
614615 var currentNodeId = Infrastructure . Cluster . GlobalClusterCenter . ClusterContext ? . NodeId ;
@@ -668,10 +669,22 @@ private async Task MvcForwardSendData(WebSocket webSocket, HttpContext context,
668669 object invokeResult = await MvcDistributeAsync ( webSocketOption , context , webSocket , request , requestBody , logger , appLifetime ) ;
669670
670671 // 发送结果给客户端
671- //string serialJson = JsonSerializer.Serialize(invokeResult, webSocketOption.DefaultResponseJsonSerializerOptions);
672- //await webSocket.SendAsync(new ArraySegment<byte>(Encoding.UTF8.GetBytes(serialJson)), result.MessageType, result.EndOfMessage, CancellationToken.None);
672+ // 使用统一的SendAsync方法,自动适配单机和集群模式
673+ // Use unified SendAsync method, automatically adapts to single machine or cluster mode
674+ var connectionId = context . Connection . Id ;
675+
676+ // 序列化响应以获取大小(用于统计)
677+ string serialJson = JsonSerializer . Serialize ( invokeResult , webSocketOption . DefaultResponseJsonSerializerOptions ) ;
678+ var responseBytes = Encoding . UTF8 . GetBytes ( serialJson ) ;
679+
680+ await WebSocketManager . SendAsync ( connectionId , invokeResult , webSocketOption . DefaultResponseJsonSerializerOptions , Encoding . UTF8 ) . ConfigureAwait ( false ) ;
681+
682+ // 记录消息发送指标
683+ var currentNodeId = Infrastructure . Cluster . GlobalClusterCenter . ClusterContext ? . NodeId ;
684+ _metricsCollector ? . RecordMessageSent ( responseBytes . Length , currentNodeId , context . Request . Path ) ;
673685
674- await invokeResult . SendLocalAsync ( webSocketOption . DefaultResponseJsonSerializerOptions , result . MessageType , timeout : ResponseSendTimeout , encoding : Encoding . UTF8 , sendBufferSize : SendTextBufferSize , socket : webSocket ) . ConfigureAwait ( false ) ;
686+ // 记录统计信息(如果统计记录器可用)
687+ Infrastructure . Cluster . GlobalClusterCenter . StatisticsRecorder ? . RecordBytesSent ( context . Connection . Id , responseBytes . Length ) ;
675688 }
676689 catch ( JsonException ex )
677690 {
0 commit comments