从github上下载源码之后(至于如何下载源码,请浏览系列教程前面的部分),浏览目录结构可以看到,skynet的源码结构是这样的
有些源码是c语言写的,主要是底层的实现,为了性能考虑的。而有些是lua写的,比较偏向于游戏业务方面。
3rd:存放第三方的代码,有lua和jemalloc等,其中jemalloc是一个内存分配的库,用来提高malloc的性能,但是如果你打开jemalloc目录的话会发现里面什么东西都没有,实际上在Linux下编译,会在编译的时候,自动下载相关的文件到放到这里。
examples:框架的示例,启动skynet的配置文件也在这里。
lualib:使用Lua写的库
lualib-src:c语言编写的封装给lua使用的库,编译后生成的so文件在luaclib中(如bson.so, skynet.so, sproto.so等),提供C层级的api调用,如调用socket模块的api,调用skynet消息发送,注册回调函数的api,甚至是对C服务的调用等,并导出lua接口,供lua层使用,可以视为lua调C的媒介。
service:lua写的服务,按我的理解是这里所写的服务都是和业务层关系最密切的一部分,这里的服务都是lua写的,每个服务都被称作lua虚拟机。所以刚开始看到这个lua虚拟机的时候,感觉有点吓人,好像和那个java虚拟机一样很复杂。实际上并不是的,这里只是一个个独立的服务而已。
service-src:使用c写的并封装给Lua使用的服务,编译后生成的so文件在cservice中(如gate.so, harbor.so, logger.so, snlua.so)
skynet-src:c语言写的skynet核心代码,编译后产生skynet可执行文件,这是整个框架中最的核心代码。
test:lua写的一些测试代码,可以方便开发人员学习。
以上就是一些比较核心需要了解知道的文件,其他的一些关于编译以及平台的一些文件并不是很重要。或许看到以上文件介绍,脑子里可能有点乱,我在网上找了张图,可能一下子就比较清楚了解了整个源码架构了。
这样子形象化的结构可能更加容易记住,这里skynet只允许上层调用下层,而不允许下层直接调用上层的api。