skynet_pbc源码分析

本文详细解析了Skynet启动过程中的关键步骤,包括lua环境的初始化、全局节点和虚拟机的初始化、信号处理、配置文件加载及环境变量设置等。通过深入代码层面,帮助读者理解Skynet的工作机制。

分析之前先搭好环境,找好日志输出函数,接下去就是边看代码边打日志。如果有不懂的,就自己代码测试。

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环境退出。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值