From f859a2c0f9a2a0938eb51d8a15c4436f5b6c3c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A2=AB=E9=81=97=E5=BF=98=E7=9A=84=E8=AE=B0=E5=BF=86?= <32097237+YIWANG-sketch@users.noreply.github.com> Date: Wed, 11 Dec 2024 02:53:52 +0800 Subject: [PATCH] load balancing strategy --- sessionManager.mjs | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/sessionManager.mjs b/sessionManager.mjs index b2ff6ac..c1fec8b 100644 --- a/sessionManager.mjs +++ b/sessionManager.mjs @@ -1,21 +1,42 @@ class SessionManager { constructor(provider) { this.sessions = provider.sessions; + this.provider = provider; + + // 初始化账号锁定状态 + for (const username in this.sessions) { + this.sessions[username].locked = false; + } } - // 获取所有可用会话 + // 获取所有可用且未锁定会话 getAvailableSessions() { - return Object.keys(this.sessions).filter(username => this.sessions[username].valid); + const currentMode = this.provider.currentMode; + + return Object.keys(this.sessions).filter(username => { + const session = this.sessions[username]; + return session.valid && !session.locked && session.modeStatus[currentMode]; + }); } - // 随机选择会话 + // 随机选择一个可用会话 getRandomSession() { const availableSessions = this.getAvailableSessions(); if (availableSessions.length === 0) { throw new Error('没有可用的会话'); } const randomIndex = Math.floor(Math.random() * availableSessions.length); - return availableSessions[randomIndex]; + const selectedUsername = availableSessions[randomIndex]; + // 锁定账号 + this.sessions[selectedUsername].locked = true; + return selectedUsername; + } + + // 释放账号锁定 + releaseSession(username) { + if (this.sessions[username]) { + this.sessions[username].locked = false; + } } // 策略 @@ -27,4 +48,4 @@ class SessionManager { } } -export default SessionManager; \ No newline at end of file +export default SessionManager;