-
Notifications
You must be signed in to change notification settings - Fork 4.2k
APIList
Ron Ngai edited this page May 6, 2022
·
16 revisions
以下列出了所有 skynet 目前提供的 lua 模块的 API 列表,细节待补充:
skynet LuaAPI
构建服务需要的 API :
- register_protocol(class) 在当前服务内注册一类消息的处理机制。
- start(func) 用 func 函数初始化服务,并将消息处理函数注册到 C 层,让该服务可以工作。
- init(func) 若服务尚未初始化完成,则注册一个函数等服务初始化阶段再执行;若服务已经初始化完成,则立刻运行该函数。
- dispatch(type, func) 为 type 类型的消息设定一个处理函数。
- getenv(key) 返回当前进程内注册表项的值。
- setenv(key,value) 向当前进程内注册表添加一项(不可以重置已有配置项)。
- memlimit(bytes) 设定当前服务最多可以使用多少字节的内存,该函数必须先于 start 函数调用。
构建框架需要的 API :
- newservice(name, ...) 启动一个名为 name 的新服务。
- uniqueservice(name, ...) 启动一个唯一服务,如果服务该服务已经启动,则返回已启动的服务地址。
- queryservice(name) 查询一个由 uniqueservice 启动的唯一服务的地址,若该服务尚未启动则等待。
- localname(name) 返回同一进程内,用 register 注册的具名服务的地址。
任务调度和自身控制 API :
- sleep(time) 让当前的任务等待 time * 0.01s 。
- yield() 让出当前的任务执行流程,使本服务内其它任务有机会执行,随后会继续运行。
- wait() 让出当前的任务执行流程,直到用 wakeup 唤醒它。
- wakeup(co) 唤醒用 wait 或 sleep 处于等待状态的任务。
- fork(func, ...) 启动一个新的任务去执行函数 func 。
- killthread(thread) 关闭任务。
- timeout(time, func) 设定一个定时触发函数 func ,在 time * 0.01秒后触发。
- starttime() 返回当前进程的启动 UTC 时间(秒)。
- now() 返回当前进程启动后经过的时间 (0.01 秒) 。
- time() 通过 starttime 和 now 计算出当前 UTC 时间(单位是秒, 精度是ms)。
- address(addr) 将一个服务地址转换为一个可供显示的字符串。
- self() 返回当前服务的地址。
- exit() 结束当前服务。
状态查询 API :
- info_func(func) 注册一个查询内部状态的函数,供 debug 协议调用。
- stat(what) 查询当前服务的内部状态,what 可以是
- endless 是否处于长期占用 cpu 的状态
- mqlen 尚未处理的消息条数
- message 已处理的消息条数
- cpu占用总 cpu 时间
消息传播 API :
- call(addr, type, ...) 用 type 类型发送一个消息到 addr ,并等待对方的回应。
- send(addr, type, ...) 用 type 类型向 addr 发送一个消息。
- redirect(addr, source, type, ...) 伪装成 source 地址,向 addr 发送一个消息。
- ret(msg, sz) 将打包好的消息回应给当前任务的请求源头。
- retpack(...) 将消息用 pack 打包,并调用 ret 回应。
- response([packfunc]) 生成一个回应函数,用于在将来回应当前任务。当消息不使用默认的 lua 类型时,需提供对应的消息打包函数。
- error(msg) 向 log 服务发送一条消息。
- pack(...) 用默认的 lua 类型打包一个消息,返回可供内部调用的指针和长度。使用int保存大小,所以被打包的不能超过2^(32-1)。
- packstring(...) 用默认的 lua 类型打包一个消息,返回一个 lua 字符串。
- unpack(msg [, sz]) 将 pack 或 packstring 打包的消息解包,若没有 sz 则 msg 必须为一个 lua 字符串 。
- tostring(msg, sz) 将一个指针和长度定义的消息包转换成一个字符串。
用于某些特殊需要,只有在明确知道其意义再使用的 API :
- harbor(addr) 查询一个服务地址在哪个节点上。
- rawsend(addr, type, msg, sz) 用 type 类型向 addr 发送一个打包好的消息。
- rawcall(addr, type, msg, sz) 用 type 类型发送一个已经打包好的消息到 addr ,并等待对方的回应,但不对回应信息解包。
- trash(msg, sz) 销毁一个指针和长度定义的消息包。
- dispatch_unknown_request(func) 为无法处理的消息类型设定一个处理函数。
- dispatch_unknown_response(func) 为无法处理的回应消息设定一个处理函数。
内部使用或由于兼容目的存在的 API :
- genid() 生成唯一 session 。
- dispatch_message(typeid, msg, sz, session, source) 默认的消息处理过程,由 C 层传递给它消息的五元组:消息类型 id 、指针、长度、session 号、消息源地址。
- pcall(func, ...) 执行一个函数,捕获可能抛出的异常,并保证在此之前运行由 init 注册的初始化过程。
- init_service(func) 用 func 函数初始化服务。
- endless() 查询当前服务的当前任务是否处于长期占用 cpu 的状态。
- mqlen() 查询当前服务有多少尚未处理的消息。
- task(result) 返回当前服务尚未处理完成的任务调用堆栈信息。
- task() 返回尚未处理完成的任务的个数。
- task("init") 返回未完成的初始化任务的调用堆栈信息。
- task(session) 返回 session 对应的任务的调用堆栈信息。
- term(source) 假定 source 服务已经退出。
通过导入 skynet.manager 的附加 API ,由于兼容目的或构建框架的目的而存在:
- launch(name, ...) 直接启动一个 C 服务。
- kill(addr) 强制退出一个服务。
- abort() 结束 skynet 进程。
- register(name) 给当前服务起一个字符串名。
- name(name, address) 为 address 指定的服务起一个名字。
- forward_type(map, start_func) 为当前服务注册一个以消息转发为目的的消息处理函数。
- filter(filter_func, start_func) 为当前服务注册一个消息处理函数,并在每条消息前注册一个消息过滤器。
- monitor(address) 注册一个全局服务监控服务,监控所有服务的退出事件。
skynet.cluster Cluster
- call(node, address, ...) 向一个节点上的一个服务提起一个请求,等待回应。
- send(node, address, ...) 向一个节点上的一个服务推送一条消息。
- open(port) 让当前节点监听一个端口。
- reload([config]) 重新加载当前节点的网络配置,可以提供一个 config 表,取代文件配置。
- proxy(node, address) 为远程节点上的服务创建一个本地代理服务。
- snax(node, name, address) 向远程节点上的 snax 服务创建一个本地代理。
- register(name, address) 在当前节点上为一个服务起一个字符串名字,之后可以用这个名字取代地址。
- query(node, name) 在远程节点上查询一个名字对应的地址。
skynet.coroutine Coroutine
用于取代 lua 默认的 coroutine 库,以和 skynet 框架配合。新增 api 有:
- thread(co) 返回一个 coroutine 所属的 skynet 任务。
skynet.codecache CodeCache
skynet.profile Profile
skynet.datacenter DataCenter
skynet.harbor Cluster
skynet.multicast Multicast
skynet.queue CriticalSection
skynet.sharedata ShareData
skynet.socket Socket
skynet.dns Socket
skynet.socketchannel SocketChannel
待补充:
skynet.request https://github.com/cloudwu/skynet/blob/master/test/testselect.lua
skynet.db.redis
skynet.db.mongo
skynet.db.mysql
bson
sproto
skynet.crypt
skynet.datasheet
http