1. 程式人生 > >leaf原始碼分析(四)----console和module

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日

如果你覺得本文對你有幫助,可以轉發分享到你的朋友圈,讓更多人一起學習。

第一時間獲取文章,可以關注本人公眾號:月牙寂道長,也可以掃碼關注


最後感謝關注本人公眾號。
如果想檢視歷史文章,可以點選公眾號下方的按鈕“歷史文章”
或者點選公眾號下方按鈕“文章目錄”獲取所有文章的索引檔案