Skip to content
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

Clone this wiki locally