优化一下

This commit is contained in:
liuwei
2026-02-02 10:43:51 +08:00
parent f1626a97f5
commit d1fc743af9

View File

@@ -27,18 +27,19 @@ class GsCoreClient:
if self._ws is not None:
return True
try:
logger.info(f"[GsCoreClient] 正在连接早柚核心: {self._url}")
# 兼容性方案:如果 Header 传参报错,尝试将 token 附加在 URL 参数中
# 格式变为: ws://ip:port/ws/abot?token=liuwei
connector_url = self._url
if "?" in connector_url:
connector_url += f"&token={self._token}"
else:
connector_url += f"?token={self._token}"
# 构造 Header
headers = {
"Authorization": f"Bearer {self._token}",
"Token": self._token
}
logger.info(f"[GsCoreClient] 正在尝试连接 (兼容模式): {connector_url}")
# 修复点:确保 extra_headers 正确传递
# 去掉 extra_headers,避免触发底层 create_connection 的参数检查
self._ws = await websockets.connect(
self._url,
extra_headers=headers,
connector_url,
max_size=10 ** 7
)
@@ -49,11 +50,10 @@ class GsCoreClient:
loop = asyncio.get_running_loop()
self._recv_task = loop.create_task(self._recv_loop())
logger.success("[GsCoreClient] 连接成功且鉴权通过")
logger.success("[GsCoreClient] 连接成功")
return True
except Exception as e:
# 如果依然报错,可能是 websockets 版本过旧,建议升级: pip install --upgrade websockets
logger.error(f"[GsCoreClient] 连接或鉴权失败: {e}")
logger.error(f"[GsCoreClient] 连接失败: {e}")
self._ws = None
return False
@@ -62,25 +62,22 @@ class GsCoreClient:
try:
if not self._ws:
break
msg = await self._ws.recv()
msg_str = msg.decode("utf-8") if isinstance(msg, bytes) else msg
try:
payload = json.loads(msg_str)
if self._message_handler:
await self._message_handler(payload)
except Exception as e:
logger.exception(f"[GsCoreClient] 解析核心返回失败: {e}")
logger.exception(f"[GsCoreClient] 解析返回失败: {e}")
except websockets.exceptions.ConnectionClosed as e:
if not self._is_closing:
logger.warning(f"[GsCoreClient] WebSocket连接断开 ({e.code})5秒后重连...")
logger.warning(f"[GsCoreClient] 连接断开 ({e.code})5秒后重连...")
break
else:
break
except Exception as e:
logger.exception(f"[GsCoreClient] 接收消息异常: {e}")
logger.exception(f"[GsCoreClient] 接收异常: {e}")
break
await asyncio.sleep(0.1)
@@ -94,6 +91,7 @@ class GsCoreClient:
if not await self.connect():
return False
try:
# 显式检查连接状态
await self._ws.send(message.encode("utf-8"))
return True
except (websockets.exceptions.ConnectionClosed, Exception) as e: