修复代码, 现在可以正常接收平台心跳包并返回设备状态
This commit is contained in:
@@ -93,6 +93,8 @@ class WebSocketClient:
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"发送消息失败: {e}")
|
||||
# 连接可能已断开,更新状态
|
||||
self.connected = False
|
||||
return False
|
||||
|
||||
async def listen(self):
|
||||
@@ -125,18 +127,26 @@ class WebSocketClient:
|
||||
logger.error(f"监听平台消息时发生错误: {e}")
|
||||
self.connected = False
|
||||
|
||||
async def send_heartbeat(self):
|
||||
"""发送心跳消息"""
|
||||
if not self.connected:
|
||||
return False
|
||||
async def reconnect(self):
|
||||
"""尝试重新连接到平台"""
|
||||
logger.info("尝试重新连接到平台...")
|
||||
reconnect_delay = 5 # 初始重连延迟(秒)
|
||||
max_delay = 60 # 最大重连延迟(秒)
|
||||
|
||||
heartbeat_msg = {
|
||||
"type": "heartbeat",
|
||||
"device_id": self.device_id,
|
||||
"timestamp": datetime.utcnow().isoformat() + 'Z'
|
||||
}
|
||||
|
||||
return await self.send_message(heartbeat_msg)
|
||||
while self.running and not self.connected:
|
||||
try:
|
||||
await self.connect()
|
||||
if self.connected:
|
||||
logger.info("重新连接成功")
|
||||
return True
|
||||
else:
|
||||
logger.warning(f"重新连接失败,{reconnect_delay}秒后重试...")
|
||||
await asyncio.sleep(reconnect_delay)
|
||||
# 指数退避,但不超过最大延迟
|
||||
reconnect_delay = min(reconnect_delay * 2, max_delay)
|
||||
except Exception as e:
|
||||
logger.error(f"重新连接时发生错误: {e}")
|
||||
await asyncio.sleep(reconnect_delay)
|
||||
|
||||
def is_connected(self):
|
||||
"""检查是否已连接"""
|
||||
|
||||
Reference in New Issue
Block a user