01、Skynet与Actor模型
在系统Skynet之前,先了解一下Skynet与Actor模型,下列是风云大佬的介绍以及一个大佬的博客
- https://github.com/cloudwu/skynet/wiki/GettingStarted
- https://blog.csdn.net/qq769651718/article/details/79432793
02、Skynet基础API
start(func)
: 用 func函数初始化服务,并将消息处理函数注册到 C 层,让该服务可以工作。init(func):
若服务尚未初始化完成,则注册一个函数等服务初始化阶段再执行;若服务已经初始化完成,则立刻运行该函数。setenv(key,value):
向当前进程内注册表添加一项(不可以重置已有配置项)。skynet.getenv(key) :
conf配置信息已经写入到注册表中,通过该函数获取注册表的变量值skynet.exit():
结束当前服务skynet.error(str):
打印函数
全部API列表:https://github.com/cloudwu/skynet/wiki/APIList
03、Demo
配置
project = "../project/"
thread = 8
cpath = "./cservice/?.so"
bootstrap = "snlua bootstrap"
start = "01baskAPI"
-- 可以是 1-255 间的任意整数。一个 skynet 网络最多支持 255 个节点。每个节点有必须有一个唯一的编号。
-- 如果 harbor 为 0 ,skynet 工作在单节点模式下。此时 master 和 address 以及 standalone 都不必设置。
harbor = 0
lualoader = "./lualib/loader.lua"
luaservice = "./service/?.lua;"..project.."?.lua;"
lua_path = "./lualib/?.lua;" .. "./lualib/?/init.lua;"
lua_cpath = "./luaclib/?.so"
-- 自定义的变量
myname = "mhzzj"
myage = 9999
代码
local skynet = require "skynet"
skynet.init(function ()
local name = skynet.getenv("myname")
local age = skynet.getenv("myage")
skynet.error("01baskAPI [init] name",name,"age",age,"newKey",skynet.getenv("newKey"))
skynet.setenv("newKey","newValue");
skynet.error("01baskAPI [init] name",name,"age",age,"newKey",skynet.getenv("newKey"))
-- skynet.setenv("newKey","newValue2"); 对已经存在的key赋值会导致报错
-- skynet.setenv("myname","myname");
end)
skynet.start(function()
local name = skynet.getenv("myname")
local age = skynet.getenv("myage")
skynet.error("01baskAPI [start main] name ",name,"age",age,"newKey",skynet.getenv("newKey"))
skynet.exit()
end)
运行结果
04、相关代码
https://gitee.com/mhz-zzj/skynet-study