为什么要封装?封装可以减少一些重复代码,提高我们的工作效率。
1、定义属性
新建文件lualib/service.lua,定义模块的属性, service模块是对Skynet服务的一种封装,代码如下所示:
local skynet = require "skynet"
local cluster = require "skynet.cluster"
local M = {
--类型和id
name = "",
id = 0,
--回调函数
exit = nil,
init = nil,
--分发方法
resp = {},
}
return M
- name代表服务的类型、id代表服务编号。
如下图中的gateway1,它的name是gateway,id是1;对于agentmgr,它的name是agentmgr,id是0(全局唯一)。
- init和exit是回调方法,在服务初始化和退出时会被调用(本篇暂不实现exit的功能)。
- resp表会存放着消息处理方法。

2、启动逻辑
给service模块添加如下所示的start方法,用于开启服务。当外部调用start方法时,它先给name和id赋值,再调用skynet.start开启服务。服务启动后,Skynet会调用init方法,由它调用skynet.dispatch实现消息的路由,再调用上层的M.init()。
function init()
skynet.dispatch("lua", dispatch)
if M.init then
M.ini

文章介绍了如何使用Lua进行Skynet服务的封装,包括定义服务属性、启动逻辑、消息分发方法以及辅助方法,如call和send,以减少重复代码,提高效率。通过示例展示了如何创建和启动一个简单的gateway服务。
最低0.47元/天 解锁文章
2670

被折叠的 条评论
为什么被折叠?



