本文公众号链接: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相关推荐

  1. ABP源码分析四十七:ABP中的异常处理

    ABP源码分析四十七:ABP中的异常处理 参考文章: (1)ABP源码分析四十七:ABP中的异常处理 (2)https://www.cnblogs.com/1zhk/p/5538983.html (3 ...

  2. 【投屏】Scrcpy源码分析四(最终章 - Server篇)

    Scrcpy源码分析系列 [投屏]Scrcpy源码分析一(编译篇) [投屏]Scrcpy源码分析二(Client篇-连接阶段) [投屏]Scrcpy源码分析三(Client篇-投屏阶段) [投屏]Sc ...

  3. gSOAP 源码分析(四)

    gSOAP 源码分析(四) 2012-6-2 邵盛松 前言 本文主要说明gSOAP中对Client的认证分析 gSOAP中包含了HTTP基本认证,NTLM认证等,还可以自定义SOAP Heard实现认 ...

  4. Spring 源码分析(四) ——MVC(二)概述

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) from:Spring 源码分析(四) --MVC(二)概述 - 水门-kay的个人页面 - OSCHINA ...

  5. 【转】ABP源码分析四:Configuration

    核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...

  6. 【转】ABP源码分析四十七:ABP中的异常处理

    ABP 中异常处理的思路是很清晰的.一共五种类型的异常类. AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationExce ...

  7. 【转】ABP源码分析三:ABP Module

    Abp是基于模块化设计思想进行构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modul ...

  8. 谷歌chrome浏览器的源码分析(四)

    上一次说到需要调用这个OpenURLFromTab函数,那么这个函数是做什么的呢?从名称上可能猜到它是打开网页,但是是从目前TAB页里打开呢?还是新建一个?或者使用每个TAB页一个进程呢?这些疑惑,只 ...

  9. 【转】ABP源码分析四十六:ABP ZERO中的Ldap模块

    通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供Defaut ...

最新文章

  1. CCF-GAIR 2020 全球人工智能和机器人峰会今日开幕
  2. 59.加载Viewcontroller的几种方法(添加导航,解决xib里面空间不显示问题)
  3. 2017-2-15从0开始前端学习笔记(HTML)-图片-表格-表单
  4. 树莓派远程连接的三种方式总结
  5. 深入解读f-散度和f-GAN训练的相关数学性质
  6. Response_案例2_输出字符数据
  7. [转]Angular 单元测试讲解
  8. ROS学习笔记四:用C++编写ROS发布与订阅
  9. HashMap、ConcurretnHashMap面试题详解,源码分析
  10. (24)FPGA面试题3分频器
  11. vue中的 $children 和 $parent
  12. 收发一体超声波测距离传感器模块_超声波避障传感器在哪些地方运用
  13. linux连接FreeBSD虚拟机的mysql
  14. 一文详解 Java 的八大基本类型!
  15. Outlook 2013中 IMAP配置
  16. 惠普打印机驱动服务器系统安装教程,最简单的安装惠普1020打印机驱动的方法...
  17. 知其然,知其所以然!
  18. U盘启动盘制作与ISO分享
  19. HTML粘性定位,CSS:position——绝对、相对、固定、粘性定位的简单记录
  20. 电商平台-安全设计与架构

热门文章

  1. 新人如何走出职场的樊篱
  2. 协方差局长你_手把手教你协方差分析的SPSS操作!
  3. 使用AIDL+动态代理+运行时注解+反射 反手撸一套Android跨进程通信框架
  4. python3 16位字符串16进制字符串转整形问题
  5. 伪元素(pseudo-elements)
  6. 计算机基础考试范围,《大学计算机基础考试范围.pdf
  7. 电动平衡车UL2272测试哪些项目
  8. 记一次 MySQL 数据库遭比特币病毒处理方法
  9. Python pow函数
  10. 日语助词よ的语法汇总,请牢记