启动流程
启动流程主要集中在两个文件中:
1是skynet-src/skynet_main.c这个是main()函数所在,主要就是设置一下lua的环境、默认的配置、打开config配置文件,并修改默认配置。最后调用skynet_start()函数,这个函数在skynet_start.c文件中。
2是skynet-src/skynet_start.c这个文件主要是初始化Skynet的各个模块,包括harbor节点、handle服务ID、mq消息队列、module加载动态链接库、timer时钟、socket套接字以及加载一些服务logger日志服务、master主服务、harbor节点服务、snlua加载lua模块的服务;以及最后启动几种线程包括_moitor、_timer、_socket和根据线程数启动n个工作线程。
这里需要注意的是Skynet将通过snlua服务加载第一个用户的服务:
即:ctx = skynet_context_new("snlua", config->start);这行,意思就是使用snlua加载config->start这个服务。而config->start指向配置文件config的start = "main"这行。
调用服务
这个主要在C语言中实现,代码在skynet-src/skynet_server.c的skynet_context_new()函数中,这个函数主要就是实例化服务动态链接库中的”_create()”和”_init()”,以及给服务创建一个私有的消息队列。并填充到struct skynet_context结构中。这个结构很重要。
skynet_send(),发送消息到队列中,等待调用服务的回调函数。