mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-21 22:53:56 +08:00
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import json
|
|
import time
|
|
from typing import Dict, Any
|
|
|
|
from core.handle.textMessageHandler import TextMessageHandler
|
|
from core.handle.textMessageType import TextMessageType
|
|
|
|
TAG = __name__
|
|
|
|
|
|
class PingMessageHandler(TextMessageHandler):
|
|
"""Ping消息处理器,用于保持WebSocket连接"""
|
|
|
|
@property
|
|
def message_type(self) -> TextMessageType:
|
|
return TextMessageType.PING
|
|
|
|
async def handle(self, conn, msg_json: Dict[str, Any]) -> None:
|
|
"""
|
|
处理PING消息,发送PONG响应
|
|
消息格式:{"type": "ping"}
|
|
Args:
|
|
conn: WebSocket连接对象
|
|
msg_json: PING消息的JSON数据
|
|
"""
|
|
# 检查是否启用了WebSocket心跳功能
|
|
enable_websocket_ping = conn.config.get("enable_websocket_ping", False)
|
|
if not enable_websocket_ping:
|
|
conn.logger.debug(f"WebSocket心跳功能未启用,忽略PING消息")
|
|
return
|
|
|
|
try:
|
|
conn.logger.debug(f"收到PING消息,发送PONG响应")
|
|
conn.last_activity_time = time.time() * 1000
|
|
# 构造PONG响应消息
|
|
pong_message = {
|
|
"type": "pong",
|
|
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
|
|
}
|
|
|
|
# 发送PONG响应
|
|
await conn.websocket.send(json.dumps(pong_message))
|
|
|
|
except Exception as e:
|
|
conn.logger.error(f"处理PING消息时发生错误: {e}")
|