|
|
@ -57,11 +57,8 @@ class WebSocketManager: |
|
|
# 创建3个Channel |
|
|
# 创建3个Channel |
|
|
await self._create_client_channels(name) |
|
|
await self._create_client_channels(name) |
|
|
|
|
|
|
|
|
# 启动心跳任务 - 确保即使其他步骤失败也要尝试启动心跳 |
|
|
# 保存心跳间隔配置,在连接成功后启动 |
|
|
try: |
|
|
client.heartbeat_interval = heartbeat_interval |
|
|
await self._start_heartbeat_task(name, heartbeat_interval) |
|
|
|
|
|
except Exception as e: |
|
|
|
|
|
logger.error(f"心跳任务启动失败,但继续创建客户端: {name} - {e}") |
|
|
|
|
|
|
|
|
|
|
|
logger.info(f"WebSocket管理器创建客户端: {name} -> {url}") |
|
|
logger.info(f"WebSocket管理器创建客户端: {name} -> {url}") |
|
|
return client |
|
|
return client |
|
|
@ -170,11 +167,15 @@ class WebSocketManager: |
|
|
|
|
|
|
|
|
logger.info(f"心跳循环启动成功: {client_name} -> {heartbeat_channel.name}") |
|
|
logger.info(f"心跳循环启动成功: {client_name} -> {heartbeat_channel.name}") |
|
|
|
|
|
|
|
|
while client_name in self._clients and self._clients[client_name].is_connected: |
|
|
while client_name in self._clients: |
|
|
try: |
|
|
try: |
|
|
|
|
|
client = self._clients[client_name] |
|
|
|
|
|
is_connected = client.is_connected |
|
|
|
|
|
|
|
|
# 创建心跳消息 |
|
|
# 创建心跳消息 |
|
|
from app.core.websocket.channel import ChannelMessage |
|
|
from app.core.websocket.channel import ChannelMessage |
|
|
heartbeat_data = {"Message": "ping"} |
|
|
heartbeat_data = {"Message": "ping"} |
|
|
|
|
|
|
|
|
heartbeat_message = ChannelMessage( |
|
|
heartbeat_message = ChannelMessage( |
|
|
type="heartbeat", |
|
|
type="heartbeat", |
|
|
data=heartbeat_data, |
|
|
data=heartbeat_data, |
|
|
@ -282,7 +283,18 @@ class WebSocketManager: |
|
|
logger.error(f"WebSocket客户端 {name} 不存在") |
|
|
logger.error(f"WebSocket客户端 {name} 不存在") |
|
|
return False |
|
|
return False |
|
|
|
|
|
|
|
|
return await client.connect() |
|
|
# 连接客户端 |
|
|
|
|
|
success = await client.connect() |
|
|
|
|
|
|
|
|
|
|
|
# 如果连接成功,启动心跳任务 |
|
|
|
|
|
if success and hasattr(client, 'heartbeat_interval'): |
|
|
|
|
|
try: |
|
|
|
|
|
await self._start_heartbeat_task(name, client.heartbeat_interval) |
|
|
|
|
|
logger.info(f"WebSocket管理器连接成功后启动心跳任务: {name}") |
|
|
|
|
|
except Exception as e: |
|
|
|
|
|
logger.error(f"心跳任务启动失败: {name} - {e}") |
|
|
|
|
|
|
|
|
|
|
|
return success |
|
|
|
|
|
|
|
|
async def disconnect_client(self, name: str) -> bool: |
|
|
async def disconnect_client(self, name: str) -> bool: |
|
|
"""断开指定客户端""" |
|
|
"""断开指定客户端""" |
|
|
|