之前版本啟動(dòng)順序,如下Windows下控制:
echo start
echo LoginServer:登錄服務(wù)器啟動(dòng)(http)
start LollipopGo.exe 8891 DT
echo GateWay:網(wǎng)關(guān)服務(wù)器啟動(dòng)(websocket)
start LollipopGo.exe 8888 GW
echo DBServer:數(shù)據(jù)庫(kù)服務(wù)器啟動(dòng)(rpc)
start LollipopGo.exe 8890 DB
echo Global Server:公共服務(wù)器啟動(dòng)(websocket玫坛,內(nèi)服務(wù))
start LollipopGo.exe 8894 GL
echo GM server :服務(wù)器啟動(dòng)(http)
start LollipopGo.exe 8892 GM
echo DSQ server :服務(wù)器啟動(dòng)(websocket)
echo LollipopGo.exe 8895 DSQ
exit
但是啟動(dòng)后我們會(huì)看到大量的log,雖然這些log后期回去掉;但是啟動(dòng)后發(fā)下很多l(xiāng)og是在啟動(dòng)的時(shí)候出現(xiàn)的包晰,如下
以DSQ服務(wù)器為例子:
var addrDSQ = flag.String("addrDSQ", "127.0.0.1:8888", "http service address") // 鏈接gateway
var ConnDSQ *websocket.Conn // 保存用戶的鏈接信息湿镀,數(shù)據(jù)會(huì)在主動(dòng)匹配成功后進(jìn)行鏈接
var ConnDSQRPC *rpc.Client // 鏈接DB server
var DSQAllMap map[string]*RoomPlayerDSQ // 游戲邏輯存儲(chǔ)
var DSQ_qi = []int{ // 1-8 A ;9-16 B ; 17 未翻牌; 18 已翻牌
Proto2.Elephant, Proto2.Lion, Proto2.Tiger, Proto2.Leopard, Proto2.Wolf, Proto2.Dog, Proto2.Cat, Proto2.Mouse,
Proto2.Mouse + Proto2.Elephant, Proto2.Mouse + Proto2.Lion, Proto2.Mouse + Proto2.Tiger, Proto2.Mouse + Proto2.Leopard,
Proto2.Mouse + Proto2.Wolf, Proto2.Mouse + Proto2.Dog, Proto2.Mouse + Proto2.Cat, 2 * Proto2.Mouse}
var cacheDSQ *cache2go.CacheTable
var DSQLeftTime int = 30
var DSQTimeSpeed = time.Millisecond * 2000
var TimeOutDSQ chan map[int]int64
type RoomPlayerDSQ struct {
RoomID int
IsRoomID bool
OpenIDA string
OpenIDB string
OpenIDA_Seat int // 默認(rèn)是0炕吸; 1 表示坐下
OpenIDB_Seat int // 默認(rèn)是0; 1 表示坐下
Default [4][4]int // 未翻牌的
ChessData [4][4]int // 棋盤數(shù)據(jù)
ReChessData [4][4]int // 重連棋盤數(shù)據(jù)
AChessNum int // A的剩余的棋子的數(shù)量
BChessNum int // B的剩余的棋子的數(shù)量
GoAround int // 回合勉痴,如果每人出10次都沒有吃子赫模,系統(tǒng)推送平局;第七個(gè)回合提示數(shù)據(jù) 第10局平局
LeftTime int // 剩余的時(shí)間
}
/*
-----------------------------------------
| |
| [0,0]01 [1,0]02 [2,0]03 [3,0]04 |
| |
| |
| [0,1]05 [1,1]06 [2,1]07 [3,1]08 |
| |
| |
| [0,2]09 [1,2]10 [2,2]11 [3,2]12 |
| |
| |
| [0,3]13 [1,3]14 [2,3]15 [3,3]16 |
| |
-----------------------------------------
*/
// 初始化操作
func init() {
TimeOutDSQ = make(chan map[int]int64, 10000)
//if strServerType == "DSQ" {
if !initDSQGateWayNet() {
fmt.Println("鏈接 gateway server 失敗!")
return
}
fmt.Println("鏈接 gateway server 成功!")
// 初始化數(shù)據(jù)
initDSQNetRPC()
//}
return
}
func initDSQNetRPC() {
client, err := jsonrpc.Dial("tcp", service)
if err != nil {
log.Debug("dial error:", err)
}
ConnDSQRPC = client
cacheDSQ = cache2go.Cache("LollipopGo_DSQ")
}
func initDSQGateWayNet() bool {
fmt.Println("用戶客戶端客戶端模擬屁使!")
log.Debug("用戶客戶端客戶端模擬淘钟!")
url := "ws://" + *addrDSQ + "/GolangLtd"
conn, err := websocket.Dial(url, "", "test://golang/")
if err != nil {
fmt.Println("err:", err.Error())
return false
}
ConnDSQ = conn
go GameServerReceiveDSQ(ConnDSQ)
initConnDSQ(ConnDSQ)
return true
}
func initConnDSQ(conn *websocket.Conn) {
fmt.Println("---------------------------------")
data := &Proto2.DSQ2GW_ConnServer{
Protocol: Proto.G_GameDSQ_Proto, // 游戲主要協(xié)議
Protocol2: Proto2.DSQ2GW_ConnServerProto2,
ServerID: util.MD5_LollipopGO("8895" + "DSQ server"),
}
fmt.Println(data)
PlayerSendToServer(conn, data)
return
}
因?yàn)榇嬖诿總€(gè)服務(wù)器有init()函數(shù),導(dǎo)致了啟動(dòng)時(shí)候出現(xiàn)大量無(wú)用的初始化數(shù)據(jù)盾戴,剛剛測(cè)試一個(gè)例子 如下:
每個(gè)文件中只有 如下init函數(shù):
package main
import (
"fmt"
)
func init() {
fmt.Println("AAAAA init")
}
測(cè)試結(jié)果:
測(cè)試結(jié)果可以看出雏掠,Windows下是按照文件順序執(zhí)行對(duì)應(yīng)的init函數(shù)的斩祭,所有這個(gè)可以作為參考;在進(jìn)一步優(yōu)化我們的游戲服務(wù)器啟動(dòng)順序乡话;具體優(yōu)化版本更新請(qǐng)查看github版本號(hào)