package main import ( "os" "time" "github.com/quic-go/quic-go" "gopkg.in/yaml.v3" ) // Config 应用程序配置结构 type Config struct { RestAddr string `yaml:"rest_addr"` WsAddr string `yaml:"ws_addr"` MetricsAddr string `yaml:"metrics_addr"` QuicAddr string `yaml:"quic_addr"` NATSURL string `yaml:"nats_url"` PersistenceType string `yaml:"persistence_type"` PersistenceDir string `yaml:"persistence_dir"` SyncEvery int `yaml:"sync_every"` MemLen int `yaml:"mem_len"` QuicConfig *quic.Config `yaml:"quic_config"` // BoltDB特有配置 BoltDBFilename string `yaml:"boltdb_filename"` // BoltDB数据库文件名 BoltDBBucketSize int `yaml:"boltdb_bucket_size"` // BoltDB数据分桶大小 } func LoadConfig(path string) (*Config, error) { file, err := os.Open(path) if err != nil { return nil, err } defer file.Close() var config Config decoder := yaml.NewDecoder(file) if err := decoder.Decode(&config); err != nil { return nil, err } return &config, nil } func GenerateSampleConfig(path string) error { config := Config{ MetricsAddr: ":8082", NATSURL: "nats://localhost:4222", PersistenceDir: "./data", PersistenceType: "memory", RestAddr: ":8080", SyncEvery: 1000, WsAddr: ":8081", QuicAddr: ":8083", QuicConfig: DefaultQuicConfig(), // BoltDB默认配置 BoltDBFilename: "gotidb.db", BoltDBBucketSize: 30, } // 序列化yaml到path file, err := os.Create(path) if err != nil { return err } defer file.Close() return yaml.NewEncoder(file).Encode(config) } func DefaultQuicConfig() *quic.Config { return &quic.Config{ MaxIdleTimeout: 30 * time.Second, // 空闲超时时间 KeepAlivePeriod: 15 * time.Second, // 保活间隔 MaxIncomingStreams: 1000, // 最大传入流数 MaxIncomingUniStreams: 1000, // 最大单向传入流数 HandshakeIdleTimeout: 10 * time.Second, // 握手超时时间 EnableDatagrams: true, // 启用数据报支持 DisablePathMTUDiscovery: false, // 启用路径 MTU 发现 } }