skynet简介

Download Report

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功能