From 618768570711b2c2b5cfb88c460e0f2b50ae01cf Mon Sep 17 00:00:00 2001 From: root <295172551@qq.com> Date: Sun, 22 Jun 2025 04:46:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E6=B6=88=E6=81=AF=E9=A1=B5=E9=9D=A2=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将消息页面的全量轮询改为增量更新,大幅提升前端性能。 - 实现消息数量上限控制,防止DOM节点无限增长导致卡顿。 - 后端API支持按索引获取新消息,减少数据传输量。 - 增加XSS防护,提升安全性。 --- LTEMvcApp/Controllers/WebSocketController.cs | 35 ++-- LTEMvcApp/Views/Home/ClientMessages.cshtml | 160 ++++++++++++------- 2 files changed, 127 insertions(+), 68 deletions(-) diff --git a/LTEMvcApp/Controllers/WebSocketController.cs b/LTEMvcApp/Controllers/WebSocketController.cs index c3850f5..5f24034 100644 --- a/LTEMvcApp/Controllers/WebSocketController.cs +++ b/LTEMvcApp/Controllers/WebSocketController.cs @@ -247,23 +247,38 @@ namespace LTEMvcApp.Controllers /// 获取客户端消息队列 /// /// 客户端名称 + /// 发送消息起始索引 + /// 接收消息起始索引 /// 发送和接收的消息队列 [HttpGet("clients/{clientName}/messages")] - public ActionResult GetClientMessages(string clientName) + public ActionResult GetClientMessages(string clientName, [FromQuery] int sentStartIndex = 0, [FromQuery] int receivedStartIndex = 0) { var client = _webSocketManager.GetClientInstance(clientName); if (client == null) - return NotFound($"客户端 '{clientName}' 不存在或未连接"); - - var result = new { - SentMessages = client.SentMessages.ToList(), - ReceivedMessages = client.ReceivedMessages.ToList(), - SentCount = client.SentMessages.Count(), - ReceivedCount = client.ReceivedMessages.Count() - }; + // 即使客户端未连接,也可能是在配置页面中查看,所以返回空而不是404 + return Ok(new + { + SentMessages = new List(), + ReceivedMessages = new List(), + SentCount = 0, + ReceivedCount = 0 + }); + } - return Ok(result); + var sentMessages = client.SentMessages.ToList(); + var receivedMessages = client.ReceivedMessages.ToList(); + + var newSent = sentMessages.Skip(sentStartIndex).ToList(); + var newReceived = receivedMessages.Skip(receivedStartIndex).ToList(); + + return Ok(new + { + NewSentMessages = newSent, + NewReceivedMessages = newReceived, + TotalSentCount = sentMessages.Count, + TotalReceivedCount = receivedMessages.Count + }); } /// diff --git a/LTEMvcApp/Views/Home/ClientMessages.cshtml b/LTEMvcApp/Views/Home/ClientMessages.cshtml index 878e35b..6cbbcfb 100644 --- a/LTEMvcApp/Views/Home/ClientMessages.cshtml +++ b/LTEMvcApp/Views/Home/ClientMessages.cshtml @@ -63,94 +63,127 @@ @section Scripts { @@ -177,5 +222,4 @@ - } \ No newline at end of file