Transcript skynet简介
skynet 轻量级服务端底层管理框架 ForthXU/ST.sail/徐福盛 http://forthxu.com/blog/skynet.html skynet的工作 • skynet是云风编写的服务端底层管理框架,底层由C编写, 配套lua作为脚本使用,可换python等其他脚本语言。 • skynet默认开启_timer线程、_socket线程、_monitor线程以 及可配置个数的多个_worker线程,启动skynet服务就是向 skynet注册由c编写的so模块实例也就是服务。 • skynet主要工作是通过模块注册管理服务,并协调服务之 间的调用和通讯。 skynet的功能 • skynet自带的模块中有一个重要的模块是snlua.so模块,通 过snlua.so和指定lua脚本文件可以启动多个lua编写的服务 ,不用每个服务都是用c来编写,而且大部分逻辑都是在 lua 脚本下开发,只有需要考虑性能的模块才用 C 语言开 发成库,直接提供给 lua 调用。 • 现在 Skynet提供给 lua 使用的库还不多,期望以后这些库 多了,可以方便、简单的完成一个网络游戏服务端的开发 。 skynet能做什么 • skynet一般用于开发游戏服务端程序。 • Skynet是服务端的最底层框架,和游戏有关的各种服务都 是基于架构之上开发的。 • 服务启动后skynet一般由socket接受外部msg传入内部服务 做处理。 skynet分层 master.so 一般供lua服务调用 skynet.so netpack.so md5.so bson.so etc. so库 一般供lua服务调用 skynet.lua snax.lua redis.lua socket.lua etc. lua库 通过snlua启动的lua服务 launcher.lua console.lua service_mgr.lua main.lua etc. skynet lua服务 etc. skynet模块服务 harbor.so logger.so gate.so snlua.so 单个skynet进程节 点 skynet linux freeBSD Mac OS X 操作系统层 skynet目录 • 3rd:第三方代码,主要生成一些给lua用的so动态库 • lualib:lua库 • lualib-src => luaclib:给lua用的c库 • service:lua服务 • service-src => cservice:c服务 • skynet-src => skynet:主程序 • Makefile • client-src => client:测试客户端 • examples:示例工程 skynet启动流程 • skynet程序只有skynet-src目录,./skynet ./example/config启 动 • skynet_main.c读取配置文件,设置环境变量,调用 skynet_start.c的skynet_start函数 • skynet_start函数初始基础服务,调用_start函数启动_timer 线程、socket线程、_monitor线程以及配置的多个_worker 线程开始工作 skynet运行机制 • skynet每个服务最重要的是设置一个callback函数,服务向 另一个服务发消息都会压入这个服务的消息队列,等待 _worker线程从全局队列取出一个服务的消息队列,然后 再从这个消息队列取出一个消息使用这个服务的callback处 理 • 游戏服务器一般会启动一个socket服务教给gate.so管理, socket服务可以接受外部msg传递到内部服务来处理。 skynet重要文件 • • • • • • • • • skynet_server.c:管理服务 skynet_handle.c:管理服务唯一的handle skynet_module.c:启动c编写的so模块 skynet_monitor.c:监视服务死循环 skynet_mq.c:消息队列 skynet_timer.c:定时器 skynet_socket.c:Socket skynet_master.c:不同skynet节点服务名字中心服务 skynet_harbor.c:不同skynet节点通讯 skynet重要模块和服务 • gate.so:为整个skynet提供socket功能 • snlua.so:启动多个lua服务 • launcher.lua:在lua中启动服务 skynet重要库 • skynet.lua:lua常用功能封装 • skynet.so:lua调用skynet功能