- 更新 README.md 中的项目结构说明 - 添加 pprof 性能分析工具的使用说明 - 更新 build.bat 文件,增加 proto 文件编译命令 - 升级 go-logr/logr 依赖至 v1.3.0 - 降级 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc 依赖至 v1.16.0 - 降级 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp 依赖至 v1.16.0 - 升级 go.opentelemetry.io/otel/trace 依赖至 v1.20.0 - 移除 logic/main.go 中的冗余代码 - 重构 logic/server.go 中的 Start 函数 - 更新 login/main.go 文件
84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"blazing/common/socket"
|
|
"blazing/common/socket/handler"
|
|
"blazing/cool"
|
|
"blazing/logic/controller"
|
|
"blazing/modules/blazing/service"
|
|
"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
|
|
}
|
|
|
|
// 如果id是0,那就是login server
|
|
func Start(serverid uint32) {
|
|
//ants.NewPool(100)
|
|
head := handler.NewTomeeHandler()
|
|
head.Callback = controller.Recv
|
|
if serverid != 0 { //logic服务器
|
|
// 确定端口
|
|
port, err := determinePort(serverid)
|
|
if err != nil {
|
|
log.Fatalf("Failed to determine port: %v", err)
|
|
}
|
|
//go rpcclient()
|
|
//ants.Submit(rpcclient)
|
|
//随机端口产生,然后给sql注册端口
|
|
service.NewLoginServiceService().SetServerID(serverid, gconv.Uint16(port))
|
|
socket.NewServer(socket.WithCORS(), socket.WithPort(port), socket.WithSocketHandler(head)).Start()
|
|
|
|
} else {
|
|
//go rpcserver() //对login tcp启动
|
|
//ants.Submit(rpcserver)
|
|
socket.NewServer(socket.WithCORS(), socket.WithPort(defaultPort), socket.WithSocketHandler(head)).Start()
|
|
}
|
|
|
|
}
|