专栏首页月牙寂leaf源码分析(四)----console和module

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

版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。golang群:570992072。qq 29185807 个人公众号:月牙寂道长 公众号微信号yueyajidaozhang https://blog.csdn.net/screscent/article/details/80051778

本文公众号链接:https://mp.weixin.qq.com/s/1rPZbn703uWgv1a4iEdXmQ

Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏服务器框架。Leaf 适用于各类游戏服务器的开发,包括 H5(HTML5)游戏服务器。

已经分析过的文章有

leaf源码分析(一)----chanrpc

leaf源码分析(二)----skeleton

leaf源码分析(三)----gate和network

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日

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我们对比了5款数据库,告诉你NewSQL的独到之处

    对大多数开发人员而言,SQL 以及 MySQL、PostgreSQL 等关系数据库管理系统(即 RDBMS)并不陌生。RDBMS 的基本架构原则已历经了数十年的...

    华章科技
  • Thumbnailator的简介和使用范例

    Thumbnailator是一个用来生成图像缩略图的 Java类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。 有了这玩意,就...

    飞奔去旅行
  • Golang 中函数作为值与类型

    在 Go 语言中,我们可以把函数作为一种变量,用 type 去定义它,那么这个函数类型就可以作为值传递,甚至可以实现方法,这一特性是在太灵活了,有时候我们甚至可...

    张乘辉
  • Golang sync.Mutex 与 sync.RWMutex

    Golang中sync包实现了两种锁,Mutex(互斥锁)和RWMutex(读写锁),其中RWMutex是基于Mutex实现的。

    Dabelv
  • TypescriptServerPlugin_VSCode插件开发笔记3

    VS Code能够正确支持JS/TS跳转到定义、补全提示等功能,但仅限于符合Node Module Resolution以及TypeScript Module ...

    ayqy贾杰
  • Golang 方法接收者为值与指针的区别

    Golang 中同时有函数和方法。方法是一个包含了接收者(receiver)的函数,receiver可以是内置类型或者自定义类型struct的一个值或者是一个指...

    Dabelv
  • Linux上安装NTP SERVER实现时间校正

    配置时间源 vi /etc/ntp.conf server 210.72.145.44 server ntp.api.bz server 2.cento...

    菲宇
  • Golang map使用注意事项

    map 是 Golang 中的方便而强大的内建数据结构,是一个同种类型元素的无序组,元素通过另一类型唯一的键进行索引。其键可以是任何相等性操作符支持的类型, 如...

    Dabelv
  • Golang json解析与生成

    JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。尽管JSON是JavaS...

    Dabelv
  • Chrome新标签无法打开网页的解决办法

    飞奔去旅行

扫码关注云+社区

领取腾讯云代金券