skynet的流程1

logpath = "."
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"
-- preload = "./examples/preload.lua" -- run preload.lua before every lua service run
snax = root.."examples/?.lua;"..root.."test/?.lua"
-- snax_interface_g = "snax_g"
cpath = root.."cservice/?.so"
-- daemon = "./skynet.pid"

以上是配置文件:

skynet会首先启动C服务 logger 负责记录之后的服务中的Log输出

bootstrap是skynet运行的第二个服务,默认的 bootstrap 配置项为 "snlua bootstrap" ,这意味着,skynet 会启动 snlua 这个服务,并将 bootstrap 作为参数传给它。snlua 是 lua 沙盒服务,bootstrap 会根据配置的 luaservice 匹配到最终的 lua 脚本。如果按默认配置,这个脚本应该是 service/bootstrap.lua

接下来在bootstrap 脚本会启动launcher,根据harbor即节点数量(最多255个)来判断是否单节点模式

然后根据standalone来以多进程的模式使用skynet

决定当前节点是否是主节点,主节点需要开启一个控制中心,和其它节点交互

通常standalone和master地址端口一样,开启cmaster之后 开启cslave服务 两个服务还负责同步 skynet 网络中的全局可见的服务名字

master在这个地址上监听(master-slave(1:n),控制节点-工作节点)

控制节点(也可以同时是工作节点)上需要运行一个master服务

每个工作节点上需要运行一个slave服务(按照standalone配置主动连接master,等待已有slave对自己的连接)

所有需要跟其他节点通信的节点都要运行一个harbor服务

如果是多节点模式,对于 master 节点,需要启动 cmaster 服务作节点调度用。此外,每个节点(包括 master 节点自己)都需要启动 cslave 服务,用于节点间的消息转发,以及同步全局名字。

接下来在 master 节点上,还需要启动 DataCenter 服务。

然后,启动用于 UniqueService 管理的 service_mgr 。

最后,它从 config 中读取 start 这个配置项,作为用户定义的服务启动入口脚本运行。成功后,把自己退出。

这个 start 配置项,才是用户定义的启动脚本,默认值为 "main"

接下来就是lua脚本了 下面就是luaAPI的使用了

https://github.com/cloudwu/skynet/wiki/LuaAPI

时间: 2024-12-19 19:22:44

skynet的流程1的相关文章

Skynet服务器框架(二) C源码剖析启动流程

引言: 之前我们已经完成了在Linux下配置安装 skynet 的环境,并成功启动了 skynet 服务框架,为了从底层更好地理解整个框架的实现过程,我们有必要剖析一下源码,由于底层的源码都是用C语言写的,lua脚本基本是用来进行业务层开发,所以我们从C源码开始解读框架.打开下载包的 skynet-src 目录,这里是skynet框架的核心C源码,接下来我们就要来解读 skynet_main.c 和 skynet_start.c 这两个与skynet启动相关的C源码. 1.入口函数和初始化: 我

skynet 创建 lua 服务流程

本文以 skynet 示例 simpledb 为例,讲述 skynet 创建 lua 服务的流程 首先 skynet 中使用 skynet.newservice 来创建 lua 服务 1 skynet.newservice("simpledb") 1 --@name:"simpledb" 2 --@args: nil 3 function skynet.newservice(name, ...) 4 return skynet.call(".launche

skynet newservice API参考

local skynet = require("skynet") skynet.start(start_func) c服务snlua启动后执行的第一个lua文件里面的主逻辑必定是skynet.start(start_func),由此开始运行lua服务的逻辑 start_func是当前lua服务的初始化函数,也是当前服务的第一个协程的函数 之后在收到非response消息时dispatch_message会创建更多的协程来做逻辑 而调用skynet.start(start_func)的主

skynet源码阅读<3>--网关分析

继上一篇介绍了skynet的网络部分之后,这一篇以网关gate.lua为例,简单分析下其串接和处理流程. 在官方给出的范例中,是以examples/main.lua作为启动脚本的,在此过程中会创建watchdog服务: 1 local watchdog = skynet.newservice("watchdog") 2 skynet.call(watchdog, "lua", "start", { 3 port = 8888, 4 maxclie

skynet启动过程_bootstrap

这遍摘自skynet 的wiki skynet 由一个或多个进程构成,每个进程被称为一个 skynet 节点.本文描述了 skynet 节点的启动流程. skynet 节点通过运行 skynet 主程序启动,必须在启动命令行传入一个 Config 文件名作为启动参数.skynet 会读取这个 config 文件获得启动需要的参数. 第一个启动的服务是 logger ,它负责记录之后的服务中的 log 输出.logger 是一个简单的 C 服务,skynet_error 这个 C API 会把字符

skynet启动过程——

skynet 由一个或多个进程构成,每个进程被称为一个 skynet 节点.本文描述了 skynet 节点的启动流程. skynet 节点通过运行 skynet 主程序启动,必须在启动命令行传入一个 Config 文件名作为启动参数.skynet 会读取这个 config 文件获得启动需要的参数. 第一个启动的服务是 logger ,它负责记录之后的服务中的 log 输出.logger 是一个简单的 C 服务,skynet_error 这个 C API 会把字符串发送给它.在 config 文件

Skynet:特性收集

基于云风的 blog,收集 skynet 的特性以便将来在代码中一一验证. “ ... ” 部分节选自云风的 BLOG. 1. 基于 Erlang-Actor 模式的 C 实现 “把一个符合规范的 C 模块,从动态库(so 文件)中启动起来,绑定一个永不重复(即使模块退出)的数字 id 做为其 handle .模块被称为服务(Service),服务间可以自由发送消息.每个模块可以向 Skynet 框架注册一个 callback 函数,用来接收发给它的消息.每个服务都是被一个个消息包驱动,当没有包

skynet 框架snax源码分析1---变量注入

skynet为了简化服务的编写,推出了snax框架,源码里也有一个例子pingserver.这是snax原创文章的第一篇,所以先就分析snax框架里的interface.lua源码,它的实现应用了一个闭包中的upvalue注入技巧. 凡是框架都得遵循框架的约定,snax有两个大的约定,一是约定了一组预置的接口init/exit/hotfix:二是accept/response这两组用来编写服务的接口.本文,并不涉及这些,而是谈accept/response是如何注入给snax服务的. snax框

使用skynet 的一个简单范例,附分析

之前已经介绍过, skynet 只是一个轻量框架,不是一个开箱即用的引擎 .能不能用好它,取决于使用者是否清楚知道自己要干什么,如果是用 skynet 做网络游戏服务器,那么就必须先知道网络游戏服务器应该如何设计. 在 skynet 发布版中带的 example 中,有类似 gate watchdog agent 之类的服务,它们并不是唯一的用 skynet 构建游戏服务器的模式.我想另外写一个范例,示范依旧基于 skynet 但用不同的模式构建游戏服务器的方法. 我花了两天时间写了这么一个 s