From 80a2392b1413bd1356324759ed902fd7124aeb0c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 06 十二月 2024 17:32:40 +0800
Subject: [PATCH] 10162 后台优化(优化聊天监控:支持长轮询方式,聊天内容不删除,重复打开依然显示最近x条;)

---
 serverinfo/chatmonitor.php |   49 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 48 insertions(+), 1 deletions(-)

diff --git a/serverinfo/chatmonitor.php b/serverinfo/chatmonitor.php
index 6950cf1..82e57f7 100644
--- a/serverinfo/chatmonitor.php
+++ b/serverinfo/chatmonitor.php
@@ -92,6 +92,9 @@
 
 <script type='text/javascript' src="/js/common.js"></script>
 <script type="text/javascript">
+    var linkType = 1; // 杩炴帴鏂瑰紡锛� 0-榛樿浣跨敤socket锛�1-闀胯疆璇�
+    var lastChat = {};
+    var errorCount = 0;
     var address = "<?php echo $address ?>";
     var port = "<?php echo $port ?>";
     var spid = "<?php echo $spid ?>";
@@ -107,8 +110,51 @@
     var scrolling = 1; //鑷姩婊氬睆锛岄粯璁ゅ紑鍚�
 
     window.onload = function() {
-        createWebSocket();
+        if (linkType == 0) {
+            createWebSocket();
+        } else {
+            requestChatContent();
+        }
     }
+
+    function sleep(ms) {
+        return new Promise(resolve => setTimeout(resolve, ms));
+    }
+
+    function requestChatContent() {
+        // console.log("requestChatContent", spid, lastChat);
+        var params = "spid=" + spid;
+        if (lastChat.AccountID) {
+            params += "&AccountID=" + lastChat.AccountID + "&Time=" + lastChat.Time + "&Content=" + lastChat.Content;
+        }
+        ajaxRequest("chatmonitors2.php?" + params,
+            function(xmlhttp) {
+                var sleepSeconds = 1;
+                if (xmlhttp.responseText) {
+                    try {
+                        var parseData = JSON.parse(xmlhttp.responseText);
+                        // console.log(parseData);
+                        switch (parseData.MsgType) {
+                            case "CHAT":
+                                addChatContent(parseData.Msg);
+                                break;
+                            default:
+                                break;
+                        }
+                    } catch (error) {
+                        errorCount += 1;
+                        console.error("error:", errorCount, error);
+                        // 姣忛敊涓�娆″鏆傚仠1绉掞紝鏈�楂樻殏鍋�1鍒嗛挓
+                        sleepSeconds = Math.min(errorCount, 60);
+                    }
+                }
+                sleep(sleepSeconds * 1000).then(() => {
+                    requestChatContent();
+                });
+            }, "POST"
+        );
+    }
+
 
     // 鏇存柊鏁忔劅璇�
     function updSensitiveWord(words) {
@@ -154,6 +200,7 @@
             if (chat.OperatorID != spid) {
                 continue;
             }
+            lastChat = chat;
             // 鏇挎崲鏁忔劅璇嶆牱寮�
             let content = chat.Content;
             for (let i = 0; i < SensitiveWords.length; i++) {

--
Gitblit v1.8.0