80 lines
2.2 KiB
Go
80 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"`
|
|
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 发现
|
|
}
|
|
}
|