Files
bl/logic/server.go
昔念 485b22a3f7 ```
feat(config): 添加RPC端口和游戏端口配置项

在配置结构体中新增了RPC端口和游戏端口字段,并更新了配置文件以支持多端口监听。同时,
调整了服务器端口选择逻辑,优先使用默认端口,不再生成随机端口。

refactor(server): 移除随机端口生成逻辑

删除了随机端口生成及相关依赖,端口选择改为从预定义列表中查找可用端口,提高端口分配的
可控性和稳定性。

fix(fight): 注释掉未实现的panic语句

为避免程序运行时因未实现逻辑导致崩溃,注释掉了Turn_Start和Fight_Start中的panic调用,
并添加了相关注释说明后续需实现的内容。

chore(config): 更新默认配置参数

更新了服务器地址、端口、数据库连接信息及Redis配置,确保开发环境配置正确。
```
2025-10-08 16:54:03 +08:00

101 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"blazing/common/rpc"
"blazing/common/socket"
"blazing/cool"
"blazing/logic/controller"
"blazing/logic/service/player"
blservice "blazing/modules/blazing/service"
"fmt"
"log"
"net"
"github.com/gogf/gf/v2/util/gconv"
)
const (
minRandomPort = 10000
maxRandomPort = 60000
maxPortRetryCount = 5
)
var defaultPort = gconv.Int(cool.Config.Port) //读入默认的端口
var candidatePorts = []int{defaultPort}
// determinePort 确定服务器使用的端口
func determinePort(serverid uint16) (int, error) {
// 服务器ID为0时使用默认端口
if serverid == 0 {
return defaultPort, nil
}
// 尝试从指定端口列表中找可用端口最多尝试maxPortRetryCount轮
for i := 0; i < maxPortRetryCount; i++ {
// 遍历指定的端口列表
for _, port := range candidatePorts {
if isPortAvailable(port) {
return port, nil
}
log.Printf("Port %d is not available, checking next...", port)
}
log.Printf("All candidate ports are in use, retrying round %d...", i+1)
}
return 0, fmt.Errorf("failed to find available port after %d rounds of checking", maxPortRetryCount)
}
// 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 uint16) {
//ants.NewPool(100)
head := player.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 func() {
t := rpc.StartClient(serverid, uint16(port), new(controller.LogicClient))
controller.Maincontroller.RPCClient = *t //将RPC赋值Start
controller.Maincontroller.Port = uint16(port) //赋值服务器ID
blservice.NewLoginServiceService().SetServerID(serverid, gconv.Uint16(port), t)
socket.
NewServer(
socket.WithCORS(),
socket.WithPort(port),
socket.WithSocketHandler(head)).
Boot()
} else {
go rpc.StartServer()
//go rpcserver() //对login tcp启动
//ants.Submit(rpcserver)
socket.NewServer(
socket.WithCORS(),
socket.WithPort(defaultPort),
socket.WithSocketHandler(head)).Boot()
}
}