Skip to content

Commit becfa75

Browse files
committed
fix: MVC响应通过集群,release version
1 parent 146d78e commit becfa75

1 file changed

Lines changed: 22 additions & 9 deletions

File tree

Cyaim.WebSocketServer/Cyaim.WebSocketServer/Infrastructure/Handlers/MvcHandler/MvcChannelHandler.cs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)