openLuat / LuatOS

LuatOS -- Powerful embedded Lua Engine for IoT devices, with many components and low memory requirements (16K RAM, 128K Flash)
https://wiki.luatos.com
MIT License
452 stars 102 forks source link

LuatOS - mqtt库 - 优化改造 #48

Closed wendal closed 3 years ago

wendal commented 4 years ago

这个任务的主要工作是将 mqtt.lua 中的部分逻辑, 使用C语言实现到luat_lib_mqttcore.c

欢迎领取上述小任务, 领取后请在1周内完成. 以上任务没有依存关系, 均可独立提交成果. 推荐使用pull request方式提交.

提交pr后, 请签署 CLA , 仅第一次提交时需要签署.

wendal commented 4 years ago

为什么要改造上述方法:

  1. 使用lua实现的方法需要较多内存,而且较慢, w600的内存有限,需要节省内存
  2. 需要改造的都是"函数", 只有输入输出参数, 不会修改全局变量/模块内变量/mqttc对象的变量
  3. 不改造带协程的方法, 任何包含sys.waitXXX的函数(及调用链), 均不适合
wendal commented 4 years ago

例如改成encodeUTF8

先把LuatOS的代码库fork到自己的账号下, 并clone到本地进行修改

修改 mqtt.lua

local encodeUTF8 = mqttcore.encodeUTF8 -- 做个引用
--[[
-- 把原有的方法注释掉
local function encodeUTF8(s)
    if not s or #s == 0 then
        return ""
    else
        return pack.pack(">P", s)
    end
end
]]

修改 luat_lib_mqttcore.c

static int l_luat_mqttcore_encodeUTF8(lua_State *L) {
       // 实现逻辑
}

// 在reg_mqttcore注册表添加引用
{ "encodeUTF8",l_mqttcore_encodeUTF8,0},

接下来,就是提交代码, 创建pull request, 请查阅git和github的文档

wendal commented 3 years ago

已重写为mqtt2.lua, 内存占用减少一半以上