Files
bl/logic/server.go
昔念 a22287d987 ```
fix(network): 修复 rpc 和 websocket 地址拼接缺少冒号的问题

修复了 jsonrpc 服务启动时监听地址缺少冒号导致解析错误的问题,
同时修正 websocket 客户端连接地址的拼接逻辑。此外,注释掉了一处日志输出,
并调整了端口检测函数的参数类型以匹配实际配置结构。

```
2025-10-08 17:16:54 +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 = cool.Config.GamePort
// 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 int(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 uint64) 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()
}
}