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

leaf源码分析(四)----console和module

这里面构建了一个TCPServer。其中最重要的部分是newAgent

leaf源码分析(四)----console和module

一个链接对应一个Agent,Agent是真正处理的地方。这个在network中已经分析过了。

leaf源码分析(四)----console和module

重点是在Run中

1、第一个框:从conn中读请求

2、解析请求

3、第二个框:从commands中查找command

4、第三个框:执行command,并将执行结果发送出去

重点在commands。


github.com/name5566/leaf/console/command.go

leaf源码分析(四)----console和module

上面注册了三个command

Help

leaf源码分析(四)----console和module

功能主要是做help信息打印

cpuprof

leaf源码分析(四)----console和module

leaf源码分析(四)----console和module

提供了两个选项,start stop

分别对应StartCPUProfile  StopCPUProfile

prof

leaf源码分析(四)----console和module

leaf源码分析(四)----console和module

1、prof的用法,4种参数。获取对应信息p,还有文件名fn

2、创建对应fn文件句柄f

3、将信息p写入文件f中


help cpuprof prof三个命令是默认内置的。那么下面有扩展的command

ExternalCommand

leaf源码分析(四)----console和module

这里利用了chanrpc,在run中同步方式调用了chanrpc中的server call1

记住这里的调用是同步调用


leaf源码分析(四)----console和module这里提供了注册扩展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

leaf源码分析(四)----console和module

三个接口


leaf源码分析(四)----console和module

一个全局的module数组,用于保存所有module。

leaf源码分析(四)----console和module

leaf源码分析(四)----console和module

Init是leaf框架的的入口。

1、所有module 初始化,OnInit

2、开启所有module工作。从line 40 和line 54可以看到。


leaf源码分析(四)----console和module

leaf源码分析(四)----console和module

向每个module发送close信号,等待所有module退出run。

最后调用module onDestroy。


下面看看module是怎么用的

src/github.com/name5566/leaf/leaf.go

框架入口部分

leaf源码分析(四)----console和module

参数就是module

1、注册所有的module

2、module进行Init(也就是上面提到的框架入口)

3、cluster初始化(集群这个代码分析略)

4、console初始化

5、等待退出信息,然后顺序退出。


还没到main函数

那么看看leafserver

leafserver/src/server/main.go

leaf源码分析(四)----console和module

以上是如何使用leaf框架提供的项目框架



在leafserver中,提供三个module,game,gate,login。

当然这些是可以根据自身需求,来做调整的。



龚浩华

月牙寂道长

QQ 29185807

2018年04月20日


以上是关于leaf源码分析----console和module的主要内容,如果未能解决你的问题,请参考以下文章

美团分布式ID生成框架Leaf源码分析及优化改进

美团分布式ID生成框架Leaf源码分析及优化改进

Leaf源码network,gate部分剖析

Leaf源码network,gate部分剖析

ABP源码分析三:ABP Module

Leaf-Server官方教程 && 游戏引擎源码实践