leaf源码分析----console和module
Posted 月牙寂道长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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日
以上是关于leaf源码分析----console和module的主要内容,如果未能解决你的问题,请参考以下文章