leaf原始碼分析(四)----console和module
Leaf 是一個由 Go 語言(golang)編寫的開發效率和執行效率並重的開源遊戲伺服器框架。Leaf 適用於各類遊戲伺服器的開發,包括 H5(HTML5)遊戲伺服器。
已經分析過的文章有
Console
Console 模組為Leaf管理提供了一個終端介面,你可以使用Telnet連線上去動態的修改引數,或者指向命令。其內部實現了Help, CpuProf, Prof命令,並提供擴充套件,可以方便的新增其他命令。另外,擴充套件命令是通過ChanRpc實現的。
目錄為下
github.com/name5566/leaf/console/console.go
先看console
這裡面構建了一個TCPServer。其中最重要的部分是newAgent
一個連結對應一個Agent,Agent是真正處理的地方。這個在network中已經分析過了。
重點是在Run中
1、第一個框:從conn中讀請求
2、解析請求
3、第二個框:從commands中查詢command
4、第三個框:執行command,並將執行結果傳送出去
重點在commands。
github.com/name5566/leaf/console/command.go
上面註冊了三個command
Help
功能主要是做help資訊列印
cpuprof
提供了兩個選項,start stop
分別對應StartCPUProfile StopCPUProfile
prof
1、prof的用法,4種引數。獲取對應資訊p,還有檔名fn
2、建立對應fn檔案控制代碼f
3、將資訊p寫入檔案f中
help cpuprof prof三個命令是預設內建的。那麼下面有擴充套件的command
ExternalCommand
這裡利用了chanrpc,在run中同步方式呼叫了chanrpc中的server call1
記住這裡的呼叫是同步呼叫
這裡提供了註冊擴充套件command的介面Register。
引數中有對應的chanrpc server。
1、在chanrpc server中將f註冊
2、構建external command
3、將其append到commands後
小結:
console中,分為了兩個部分,一個是使用者互動console.go中通過建立tcpserver,然後構建Agent介面進行互動處理。
在Command.go中,提供了內建的三個command,並且還提供了擴充套件Command介面。
程式設計非常贊。
Module
Module 為Leaf提供模組化支援。
module可以算做是整個leaf框架的入口,下面分析下,是怎麼個入口
github.com/name5566/leaf/module/module.go
三個介面
一個全域性的module陣列,用於儲存所有module。
Init是leaf框架的的入口。
1、所有module 初始化,OnInit
2、開啟所有module工作。從line 40 和line 54可以看到。
向每個module傳送close訊號,等待所有module退出run。
最後呼叫module onDestroy。
下面看看module是怎麼用的
src/github.com/name5566/leaf/leaf.go
框架入口部分
引數就是module
1、註冊所有的module
2、module進行Init(也就是上面提到的框架入口)
3、cluster初始化(叢集這個程式碼分析略)
4、console初始化
5、等待退出資訊,然後順序退出。
還沒到main函式
那麼看看leafserver
leafserver/src/server/main.go
以上是如何使用leaf框架提供的專案框架
在leafserver中,提供三個module,game,gate,login。
當然這些是可以根據自身需求,來做調整的。
龔浩華
月牙寂道長
QQ 29185807
2018年04月20日
如果你覺得本文對你有幫助,可以轉發分享到你的朋友圈,讓更多人一起學習。
第一時間獲取文章,可以關注本人公眾號:月牙寂道長,也可以掃碼關注
最後感謝關注本人公眾號。
如果想檢視歷史文章,可以點選公眾號下方的按鈕“歷史文章”
或者點選公眾號下方按鈕“文章目錄”獲取所有文章的索引檔案