feat: TCP 监听也支持条件判断
- server.addr 为空或 ':0' 时不监听 TCP - 两个都为空时启动报错,至少要配一个 - 灵活组合:仅TCP / 仅Unix / 双监听
This commit is contained in:
@@ -155,39 +155,53 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
// 启动服务器:同时监听 TCP 和 Unix socket(如果配置了的话)
|
||||
var wg sync.WaitGroup
|
||||
// 启动服务器:TCP 和 Unix socket 按配置监听
|
||||
addr := config.Cfg.Server.Addr
|
||||
unix := config.Cfg.Server.Unix
|
||||
|
||||
if config.Cfg.Server.Unix != "" {
|
||||
if addr == "" && unix == "" {
|
||||
log.Fatal("未配置任何监听地址,请设置 server.addr 或 server.unix")
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
started := 0
|
||||
|
||||
if unix != "" {
|
||||
wg.Add(1)
|
||||
started++
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
// 清理残留的 socket 文件
|
||||
os.Remove(config.Cfg.Server.Unix)
|
||||
os.Remove(unix)
|
||||
|
||||
listener, err := net.Listen("unix", config.Cfg.Server.Unix)
|
||||
listener, err := net.Listen("unix", unix)
|
||||
if err != nil {
|
||||
log.Fatalf("监听 Unix socket 失败: %v", err)
|
||||
}
|
||||
// 设置 socket 文件权限,允许 nginx 等其他进程访问
|
||||
os.Chmod(config.Cfg.Server.Unix, 0666)
|
||||
log.Printf("监听 Unix socket: %s", config.Cfg.Server.Unix)
|
||||
os.Chmod(unix, 0666)
|
||||
log.Printf("监听 Unix socket: %s", unix)
|
||||
if err := r.RunListener(listener); err != nil {
|
||||
log.Fatalf("Unix socket 服务启动失败: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// TCP 始终监听
|
||||
if addr != "" && addr != ":0" {
|
||||
wg.Add(1)
|
||||
started++
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
addr := config.Cfg.Server.Addr
|
||||
log.Printf("监听 TCP: %s", addr)
|
||||
if err := r.Run(addr); err != nil {
|
||||
log.Fatalf("TCP 服务启动失败: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
if started == 0 {
|
||||
log.Fatal("未配置任何有效监听地址")
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user