优化一下
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user