分析之前先搭好环境,找好日志输出函数,接下去就是边看代码边打日志。如果有不懂的,就自己代码测试。
main函数主流程:
1、luaS_initshr:初始化操作。
2、skynet_globalinit:全局静态skynet_node节点初始化。
3、skynet_env_init:全局静态虚拟机创建初始化。
4、sigign:SIG_IGN信号处理。
5、lua加载配置文件并初始化
struct lua_State *L = luaL_newstate();
luaL_openlibs(L); // link lua lib
int err = luaL_loadstring(L, load_config);
assert(err == LUA_OK);
lua_pushstring(L, config_file);
err = lua_pcall(L, 1, 1, 0);
if (err) {
fprintf(stderr,"%s\n",lua_tostring(L,-1));
lua_close(L);
return 1;
}
//初始化环境变量
_init_env(L);
//环境变量获取并赋值
config.thread = optint("thread",8);
config.module_path = optstring("cpath","./cservice/?.so");
config.harbor = optint("harbor", 1);
config.bootstrap = optstring("bootstrap","snlua bootstrap");
config.daemon = optstring("daemon", NULL);
config.logger = optstring("logger", NULL);
config.logservice = optstring("logservice", "logger");
config.profile = optboolean("profile", 1);
//虚拟机关闭
lua_close(L);6、skynet_start:根据配置参数启动skynet。
7、skynet_globalexit:全局skynet_node删除。
8、luaS_exitshr:lua环境退出。
版权声明:本文为chenxijie1985原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。