Update 更新文档

This commit is contained in:
2026-02-25 23:01:42 +08:00
parent 40aff32fb0
commit 80518309a7
679 changed files with 4611263 additions and 0 deletions

171
Sqbase/qfaulttolerance.h Normal file
View File

@@ -0,0 +1,171 @@
#ifndef QFAULTTOLERANCE_H
#define QFAULTTOLERANCE_H
#include <QObject>
#include <QTimer>
#include <QElapsedTimer>
#include <QDateTime>
#include <QMutex>
#include <QMap>
#include <QList>
#include "BZStruct.h"
// 连接状态
enum class ConnectionState {
Disconnected,
Connecting,
Connected,
Degraded,
Failed
};
// 心跳配置
struct HeartbeatConfig {
int intervalMs = 30000; // 心跳间隔(毫秒)
int timeoutMs = 60000; // 心跳超时时间
int maxMissedHeartbeats = 3; // 最大丢失心跳数
bool enabled = true;
};
// 重连配置
struct ReconnectConfig {
int initialDelayMs = 1000; // 初始重连延迟
int maxDelayMs = 60000; // 最大重连延迟
int maxAttempts = 10; // 最大重连尝试次数
bool exponentialBackoff = true; // 是否使用指数退避
bool enabled = true;
};
// 故障转移配置
struct FailoverConfig {
QList<QString> backupServers; // 备用服务器列表
int switchTimeoutMs = 5000; // 切换超时时间
bool autoSwitch = true; // 自动切换
bool enableLoadBalancing = false; // 启用负载均衡
};
// 连接统计
struct ConnectionStats {
ConnectionState state = ConnectionState::Disconnected;
int totalConnections = 0;
int successfulConnections = 0;
int failedConnections = 0;
int totalReconnects = 0;
qint64 totalUptimeMs = 0;
qint64 currentUptimeMs = 0;
QDateTime lastConnectionTime;
QDateTime lastDisconnectionTime;
void updateState(ConnectionState newState) {
state = newState;
if (newState == ConnectionState::Connected) {
lastConnectionTime = QDateTime::currentDateTime();
totalConnections++;
successfulConnections++;
} else if (newState == ConnectionState::Failed) {
lastDisconnectionTime = QDateTime::currentDateTime();
failedConnections++;
}
}
};
class QFaultTolerance : public QObject
{
Q_OBJECT
public:
static QFaultTolerance* instance();
// 配置管理
void setHeartbeatConfig(const HeartbeatConfig& config);
void setReconnectConfig(const ReconnectConfig& config);
void setFailoverConfig(const FailoverConfig& config);
HeartbeatConfig getHeartbeatConfig() const;
ReconnectConfig getReconnectConfig() const;
FailoverConfig getFailoverConfig() const;
// 连接管理
void registerConnection(const QString& connectionId, const QString& serverAddress);
void unregisterConnection(const QString& connectionId);
void updateConnectionState(const QString& connectionId, ConnectionState state);
ConnectionState getConnectionState(const QString& connectionId) const;
// 心跳管理
void startHeartbeat(const QString& connectionId);
void stopHeartbeat(const QString& connectionId);
void heartbeatReceived(const QString& connectionId);
// 重连管理
void initiateReconnect(const QString& connectionId);
void cancelReconnect(const QString& connectionId);
// 故障转移
void initiateFailover(const QString& failedConnectionId);
QString getNextServer(const QString& connectionId) const;
// 状态查询
ConnectionStats getConnectionStats(const QString& connectionId) const;
QMap<QString, ConnectionStats> getAllConnectionStats() const;
bool isSystemHealthy() const;
// 系统控制
void enableFaultTolerance(bool enabled);
void resetStatistics();
signals:
void connectionStateChanged(const QString& connectionId, ConnectionState state);
void heartbeatTimeout(const QString& connectionId);
void reconnectAttempt(const QString& connectionId, int attempt, int delayMs);
void reconnectSuccess(const QString& connectionId);
void reconnectFailed(const QString& connectionId);
void failoverInitiated(const QString& fromConnectionId, const QString& toServer);
void systemHealthChanged(bool healthy);
private:
explicit QFaultTolerance(QObject *parent = nullptr);
~QFaultTolerance();
void checkHeartbeats();
void attemptReconnect(const QString& connectionId);
void updateSystemHealth();
// 连接信息
struct ConnectionInfo {
QString serverAddress;
ConnectionState state = ConnectionState::Disconnected;
ConnectionStats stats;
HeartbeatConfig heartbeatConfig;
ReconnectConfig reconnectConfig;
// 心跳相关
QElapsedTimer lastHeartbeatTimer;
int missedHeartbeats = 0;
bool heartbeatEnabled = false;
// 重连相关
int reconnectAttempts = 0;
int currentReconnectDelay = 0;
QTimer* reconnectTimer = nullptr;
ConnectionInfo() = default;
ConnectionInfo(const QString& server) : serverAddress(server) {}
};
mutable QMutex m_mutex;
QMap<QString, ConnectionInfo> m_connections;
// 配置
HeartbeatConfig m_heartbeatConfig;
ReconnectConfig m_reconnectConfig;
FailoverConfig m_failoverConfig;
bool m_faultToleranceEnabled = true;
// 定时器
QTimer* m_heartbeatCheckTimer;
QTimer* m_healthCheckTimer;
// 系统状态
bool m_systemHealthy = true;
};
#endif // QFAULTTOLERANCE_H