feat(login): 重构 login 服务启动方式
- 修改 login 服务端口配置,支持动态分配 - 优化 login 服务启动流程,增加信号处理 - 调整 ServerOption 类型,支持 int 类型端口 - 移除 CommendSvrInfo 相关代码,简化结构 - 更新 main 函数,采用新的服务启动方式
This commit is contained in:
54
logic/server.go
Normal file
54
logic/server.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"blazing/cool"
|
||||
"fmt"
|
||||
"log"
|
||||
"math/rand"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
const (
|
||||
minRandomPort = 10000
|
||||
maxRandomPort = 60000
|
||||
maxPortRetryCount = 5
|
||||
)
|
||||
|
||||
var defaultPort = gconv.Int(cool.Config.Port) //读入默认的端口
|
||||
|
||||
// determinePort 确定服务器使用的端口
|
||||
func determinePort(serverid uint32) (int, error) {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
if serverid == 0 {
|
||||
return defaultPort, nil
|
||||
}
|
||||
|
||||
for i := 0; i < maxPortRetryCount; i++ {
|
||||
port := generateRandomPort()
|
||||
if isPortAvailable(port) {
|
||||
return port, nil
|
||||
}
|
||||
log.Printf("Port %d is not available, retrying...", port)
|
||||
}
|
||||
|
||||
return 0, fmt.Errorf("failed to find available port after %d attempts", maxPortRetryCount)
|
||||
}
|
||||
|
||||
// generateRandomPort 生成指定范围内的随机端口
|
||||
func generateRandomPort() int {
|
||||
return minRandomPort + rand.Intn(maxRandomPort-minRandomPort)
|
||||
}
|
||||
|
||||
// isPortAvailable 检查端口是否可用
|
||||
func isPortAvailable(port int) bool {
|
||||
address := fmt.Sprintf(":%d", port)
|
||||
listener, err := net.Listen("tcp", address)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
defer listener.Close()
|
||||
return true
|
||||
}
|
||||
Reference in New Issue
Block a user