Wind框架主要可以分三层,第一层Golang引擎层,第二层是Python引擎层,第三层是服务逻辑层。

image.png

Golang引擎层

Wind一开始设计时,就考虑到游戏服务器的性能,性能一般由编译型的静态语言保证,比如C/C++/Golang这样的。Wind选用Golang的主要原因是Golang的高并发性,这很符合服务器特性,同时Golang拥有自动内存管理以及比C/C++更简明的语法,有利于开发效率的提高,所以选择Golang来开发游戏服务对性能有要求的模块。
Wind的网络库是由Golang编写,目前支持TCP的数据传输。其实Golang端也是一个小型服务器,客户端数据发过来后,你可以在Golang端直接解析数据并处理逻辑。一些要求高性能的实时性战斗功能可以在Golang端编写,比如体育竞技和吃鸡的房间战斗功能以及MMORPG的战斗副本之类的。

Python引擎层

引入Python层主要是解决游戏业务开发效率的问题,一个完善的游戏,其实很大一部分代码都是一些外围交互逻辑代码以及一些对性能要求不高的战斗代码,面对这么大量的业务逻辑开发,一款简洁明了和有完善的生态库的开发语言非常重要。选择Python语言其实也解决了Golang热更不方便的问题,一款游戏上线后,基本上100%会出现问题,只不过问题是大是小而已。出现问题后如果热更不方便,需要时不时停服来解决,那就很影响游戏体验,所以选择Python来解决在线热更的问题,支持在线函数级别的热更新。
Python引擎层包含一款服务器运行的所有引擎组件,比如Python协程、RPC组件、Golang通信的网络、服务发现、分布式消息队列、定时器等等这些功能。

服务逻辑层

服务逻辑层就是游戏业务的逻辑了,各个具体服务(Game,gateway)继承Engine类调用一些公用引擎功能,具体服务只需要关心逻辑怎么写就行。handler目录下是用于处理RPC函数的,可以一眼分辨哪些是面向外部的接口,mgr目录就是你业务逻辑的模块代码,这个业务逻辑一般采用单例来写,因为业务层是单线程的,使用单例简单方便。