启动skynet服务器需要提供一个配置文件莫诶之文件的编写可以参考examples/config,下面是一个简单的配置文件范例:
root = "./" thread = 8 logger = nil harbor = 1 address = "127.0.0.1:2526" master = "127.0.0.1:2013" start = "main" -- main script bootstrap = "snlua bootstrap" -- The service for bootstrap standalone = "0.0.0.0:2013" luaservice = root.."service/?.lua;"..root.."test/?.lua;"..root.."examples/?.lua" lualoader = "lualib/loader.lua" snax = root.."examples/?.lua;"..root.."test/?.lua" cpath = root.."cservice/?.so"
这个配置文件实际上就是一段lua代码,通常,我们以key=value的形式对配置项赋值,skynet在启动时,会读取里面必要的配置项,并将暂时用不到的配置项以字符串形式保存在skynet内部的env表中,这些配置项可以通过skynet.getenv获取.
必要的配置项有:
thread 启动多少个工作线程,通常不要将它配置超过你实际拥有的Cpu核心数.
bootstrap skynet启动的第一个服务以及其启动参数,默认配置为snlua bootstrap ,即启动一个名为bootstrap的lua服务,通常指的是service/bootstrap.lua 这段代码.
cpath 用C编写的服务模块位置,通常指cservice下那些.so文件,如果你的系统的动态库不是以.so为后缀,需要做相应的修改,这个路径可以配置多项,以;分割
赛默认的bootstrap代码中还会进一步用到一些配置项:
logger它决定了skynet内建的skynet_error这个C API将信息输出到什么文件中,如果logger配置为nil,将输出到标准输出,你可以配置一个文件名来将信息记录在特定文件中.
logservice 默认为"logger",你可以配置为你定制的log服务(比如加上时间戳等更多信息),可以参考service_logger.c来实现它,注:如果你希望用lua来编写这个服务,可以在这里填写snlua,然后在logger配置具体的lua服务的名字.在examples目录下,有config.userlog这个范例可以参考.
logpath 配置一个路径,当你运行时为一个服务打开log时,这个服务所有的输入消息都会被记录在这个目录下,文件名为服务地址.
standalone 如果把这个skynet进程作为主进程启动(skynet可以由分布在多台机器上的多个进程构成网络,),那么需要配置standalone这一项,表示这个进程时主节点,它需要开启有个控制中心,监听一个端口,让其他节点接入.
master制定skynet控制中心的地址和端口,如果你配置了standalone项,那么这一项通常和standalone相同.
address当前skynet节点的地址和端口,方便其他节点和它组成网络,注:即使你只使用一个节点,也需要开启控制中心,并额外配置这个节点的地址和端口.
harbor 可以是1-255间的任意整数,一个skynet网络最多支持255个节点,每个节点有必须有一个唯一的编号
如果harbor为0,skynet工作在单节点模式下,此时master和address以及standalone都不必设置.
start这是bootstrap最后一个环节将启动的lua服务,也就是你定制的skynet节点的主程序.默认为main,即启动main,lua这个脚本,这个lua服务的路径由下面的luaservice指定.
集群服务用到的配置项:
cluster它决定了集群配置文件的路径.
lua服务由snlua提供,它会查找一些配置项以加载lua代码:
lualoader 用哪一段lua代码加载lua服务,通常配置为lualib/loader.lua,再由这段代码解析服务名称,进一步加载lua代码,snlua会将下面几个配置项取出,放在初始化好的lua虚拟机的全局变量中,具体可参考实现,
SERVICE_NAME第一个参数,通常是服务名
LUA_PATH config文件中配置的lua_path
LUA_CPATH config文件中配置的lua_cpath
LUA_PRELOAD config 文件中配置的preload
LUA_SERVICE config文件中配置的luaservice
SKYNET_THREAD
这个环境变量里。你可以在 config 文件中写:
thread=$SKYNET_THREAD
这样,在 skynet 启动时,就会用
SKYNET_THREAD
这个环境变量的值替换掉 config 中的
$SKYNET_THREAD
了。
daemon 配置 daemon = "./skynet.pid" 可以以后台模式启动 skynet 。注意,同时请配置 logger 项输出 log 。