leaf源码分析(四)----console和module
本文公众号链接: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日
如果你觉得本文对你有帮助,可以转发分享到你的朋友圈,让更多人一起学习。
第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注
最后感谢关注本人公众号。
如果想查看历史文章,可以点击公众号下方的按钮“历史文章”
或者点击公众号下方按钮“文章目录”获取所有文章的索引文件
leaf源码分析(四)----console和module相关推荐
- ABP源码分析四十七:ABP中的异常处理
ABP源码分析四十七:ABP中的异常处理 参考文章: (1)ABP源码分析四十七:ABP中的异常处理 (2)https://www.cnblogs.com/1zhk/p/5538983.html (3 ...
- 【投屏】Scrcpy源码分析四(最终章 - Server篇)
Scrcpy源码分析系列 [投屏]Scrcpy源码分析一(编译篇) [投屏]Scrcpy源码分析二(Client篇-连接阶段) [投屏]Scrcpy源码分析三(Client篇-投屏阶段) [投屏]Sc ...
- gSOAP 源码分析(四)
gSOAP 源码分析(四) 2012-6-2 邵盛松 前言 本文主要说明gSOAP中对Client的认证分析 gSOAP中包含了HTTP基本认证,NTLM认证等,还可以自定义SOAP Heard实现认 ...
- Spring 源码分析(四) ——MVC(二)概述
随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) from:Spring 源码分析(四) --MVC(二)概述 - 水门-kay的个人页面 - OSCHINA ...
- 【转】ABP源码分析四:Configuration
核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...
- 【转】ABP源码分析四十七:ABP中的异常处理
ABP 中异常处理的思路是很清晰的.一共五种类型的异常类. AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationExce ...
- 【转】ABP源码分析三:ABP Module
Abp是基于模块化设计思想进行构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modul ...
- 谷歌chrome浏览器的源码分析(四)
上一次说到需要调用这个OpenURLFromTab函数,那么这个函数是做什么的呢?从名称上可能猜到它是打开网页,但是是从目前TAB页里打开呢?还是新建一个?或者使用每个TAB页一个进程呢?这些疑惑,只 ...
- 【转】ABP源码分析四十六:ABP ZERO中的Ldap模块
通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供Defaut ...
最新文章
- CCF-GAIR 2020 全球人工智能和机器人峰会今日开幕
- 59.加载Viewcontroller的几种方法(添加导航,解决xib里面空间不显示问题)
- 2017-2-15从0开始前端学习笔记(HTML)-图片-表格-表单
- 树莓派远程连接的三种方式总结
- 深入解读f-散度和f-GAN训练的相关数学性质
- Response_案例2_输出字符数据
- [转]Angular 单元测试讲解
- ROS学习笔记四:用C++编写ROS发布与订阅
- HashMap、ConcurretnHashMap面试题详解,源码分析
- (24)FPGA面试题3分频器
- vue中的 $children 和 $parent
- 收发一体超声波测距离传感器模块_超声波避障传感器在哪些地方运用
- linux连接FreeBSD虚拟机的mysql
- 一文详解 Java 的八大基本类型!
- Outlook 2013中 IMAP配置
- 惠普打印机驱动服务器系统安装教程,最简单的安装惠普1020打印机驱动的方法...
- 知其然,知其所以然!
- U盘启动盘制作与ISO分享
- HTML粘性定位,CSS:position——绝对、相对、固定、粘性定位的简单记录
- 电商平台-安全设计与架构