From f748d35fe4f683e9f3b69f8e863f0601122607a8 Mon Sep 17 00:00:00 2001 From: John Smith Date: Thu, 6 Jul 2023 23:26:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=89=8D=E7=AB=AF=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E4=B8=8D=E6=B4=BB=E5=8A=A8=E6=97=B6=E5=BF=83=E8=B7=B3?= =?UTF-8?q?=E8=B6=85=E6=97=B6=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/chat.py | 2 +- frontend/src/api/chat/ChatClientRelay.js | 19 +++++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/api/chat.py b/api/chat.py index f76eed6..c8abef5 100644 --- a/api/chat.py +++ b/api/chat.py @@ -148,7 +148,7 @@ class ChatHandler(tornado.websocket.WebSocketHandler): # noqa ) def _on_receive_timeout(self): - logger.warning('client=%s timed out', self.request.remote_ip) + logger.info('client=%s timed out', self.request.remote_ip) self._receive_timeout_timer_handle = None self.close() diff --git a/frontend/src/api/chat/ChatClientRelay.js b/frontend/src/api/chat/ChatClientRelay.js index 552dd20..b3443ec 100644 --- a/frontend/src/api/chat/ChatClientRelay.js +++ b/frontend/src/api/chat/ChatClientRelay.js @@ -10,8 +10,7 @@ const COMMAND_UPDATE_TRANSLATION = 7 // const CONTENT_TYPE_TEXT = 0 const CONTENT_TYPE_EMOTICON = 1 -const HEARTBEAT_INTERVAL = 10 * 1000 -const RECEIVE_TIMEOUT = HEARTBEAT_INTERVAL + (5 * 1000) +const RECEIVE_TIMEOUT = 15 * 1000 export default class ChatClientRelay { constructor(roomId, autoTranslate) { @@ -28,7 +27,6 @@ export default class ChatClientRelay { this.websocket = null this.retryCount = 0 this.isDestroying = false - this.heartbeatTimerId = null this.receiveTimeoutTimerId = null } @@ -66,16 +64,9 @@ export default class ChatClientRelay { } } })) - this.heartbeatTimerId = window.setInterval(this.sendHeartbeat.bind(this), HEARTBEAT_INTERVAL) this.refreshReceiveTimeoutTimer() } - sendHeartbeat() { - this.websocket.send(JSON.stringify({ - cmd: COMMAND_HEARTBEAT - })) - } - refreshReceiveTimeoutTimer() { if (this.receiveTimeoutTimerId) { window.clearTimeout(this.receiveTimeoutTimerId) @@ -95,10 +86,6 @@ export default class ChatClientRelay { onWsClose() { this.websocket = null - if (this.heartbeatTimerId) { - window.clearInterval(this.heartbeatTimerId) - this.heartbeatTimerId = null - } if (this.receiveTimeoutTimerId) { window.clearTimeout(this.receiveTimeoutTimerId) this.receiveTimeoutTimerId = null @@ -117,6 +104,10 @@ export default class ChatClientRelay { let { cmd, data } = JSON.parse(event.data) switch (cmd) { case COMMAND_HEARTBEAT: { + // 不能由定时器触发发心跳包,因为浏览器会把不活动页面的定时器调到1分钟以上 + this.websocket.send(JSON.stringify({ + cmd: COMMAND_HEARTBEAT + })) break } case COMMAND_ADD_TEXT: {