当前位置: 代码迷 >> 综合 >> skynet demo plain text 分支(四)通讯协议的载入
  详细解决方案

skynet demo plain text 分支(四)通讯协议的载入

热度:0   发布时间:2024-02-01 14:21:12.0

skynet demo 项目地址(plain text分支 )


-- protoloader.lua
local skynet = require "skynet"
local sprotoparser = require "sprotoparser"
local sprotoloader = require "sprotoloader"local data = {}
local CMD = {}local function load(name)local filename = string.format("proto/%s", name)local f = assert(io.open(filename), "Can't open " .. name)local t = f:read "a"f:close()return sprotoparser.parse(t)
endfunction CMD.load(list)for i, name in ipairs(list) dolocal p = load(name)skynet.error(string.format("load proto [%s] in slot %d", name, i))data[name] = isprotoloader.save(p, i)end
endfunction CMD.index(name)return data[name]
endskynet.start(function()skynet.dispatch("lua", function(session, source, cmd, ...)local f = assert(CMD[cmd])skynet.ret(skynet.pack(f(...)))end)
end)

通讯协议需要从文件中读取协议的定义信息,然后通过sprotoparser解析成二进制流才能交给sprotoloader加载到skynet框架使用。

编写protoloader.lua服务的目的在于方便使用,你也可以直接在main.lua读取.sproto文件并交由sprotoparser解析,然后通过sprotoloader加载到框架中。

  相关解决方案