gotidb/cmd/server/config.go

79 lines
2.2 KiB
Go

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"`
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 发现
}
}