fix(server): serialize listener creation in multi-server mode
Remove VHost fallback during graceful upgrade. Serialize listener creation before parallel router/middleware setup to prevent concurrent inherited listener consumption. Fix tcpAddrMatch to match when either side is any-addr (0.0.0.0/::).
This commit is contained in:
parent
f3f78b24a8
commit
f58f194752
@ -709,22 +709,28 @@ func (s *Server) startVHostMode() error {
|
||||
//
|
||||
// 注意事项:
|
||||
// - 每个服务器有独立的中间件配置
|
||||
// - 热升级场景下回退到虚拟主机模式
|
||||
// - 使用 goroutine 并行启动多个服务器
|
||||
func (s *Server) startMultiServerMode() error {
|
||||
// 热升级检测:multi_server 热升级未实现,回退到 vhost 模式
|
||||
if os.Getenv("GRACEFUL_UPGRADE") == "1" {
|
||||
logging.Warn().Msg("multi_server mode not implemented for graceful upgrade, falling back to vhost mode")
|
||||
return s.startVHostMode()
|
||||
}
|
||||
|
||||
s.fastServers = make([]*fasthttp.Server, len(s.config.Servers))
|
||||
s.listeners = make([]net.Listener, len(s.config.Servers))
|
||||
|
||||
for i := range s.config.Servers {
|
||||
serverCfg := &s.config.Servers[i]
|
||||
ln, err := s.createListener(serverCfg)
|
||||
if err != nil {
|
||||
for j := 0; j < i; j++ {
|
||||
if s.listeners[j] != nil {
|
||||
_ = s.listeners[j].Close()
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("failed to listen on %s: %w", serverCfg.Listen, err)
|
||||
}
|
||||
s.listeners[i] = ln
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
errCh := make(chan error, len(s.config.Servers))
|
||||
|
||||
// 并行创建监听器和 fasthttp.Server
|
||||
for i := range s.config.Servers {
|
||||
wg.Add(1)
|
||||
go func(idx int) {
|
||||
@ -732,15 +738,6 @@ func (s *Server) startMultiServerMode() error {
|
||||
|
||||
serverCfg := &s.config.Servers[idx]
|
||||
|
||||
// 创建监听器
|
||||
ln, err := s.createListener(serverCfg)
|
||||
if err != nil {
|
||||
errCh <- fmt.Errorf("failed to listen on %s: %w", serverCfg.Listen, err)
|
||||
return
|
||||
}
|
||||
s.listeners[idx] = ln
|
||||
|
||||
// 创建路由器
|
||||
router := handler.NewRouter()
|
||||
|
||||
// 注册状态监控端点(仅默认服务器)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user