认识skynet(4)--原理

启动流程



启动流程

启动流程主要集中在两个文件中:

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服务加载第一个用户的服务:

snlua加载配置文件的start配置项

即: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(),发送消息到队列中,等待调用服务的回调函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • 引言: 一直都是从事客户端的开发工作,最近抽了点时间想了解一下服务器开发的相关知识,一番博客瞎逛之后,发现了一个不...
    linshuhe1阅读 5,389评论 0 10
  • 1:InputChannel提供函数创建底层的Pipe对象 2: 1)客户端需要新建窗口 2)new ViewRo...
    自由人是工程师阅读 5,472评论 0 18
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,751评论 0 17
  • 如果我喜欢你 而你也恰好喜欢我 那么 我会开心的上天 如果你不喜欢我 我会伤心 但 绝不会纠缠 因为 我知道不喜欢...
    不文艺疯青年阅读 195评论 0 2