<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## 概述 在最新的skynet中我使用的是云風的pbc庫來解析protobuf,該項目中的一個文件protobuf.lua 使用了module語法在lua5.1版本中已經刪除,最新的skynet是lua5.4版本,于是我找到了解析protobuf的lua庫--lua-protobuf。在最新的skynet中,集成lua-protobuf 所需環境如下: * skynet * lua5.4 * luarocks * lua-protobuf : https://github.com/starwing/lua-protobuf * ubuntu16.04 ## Install skynet & luarocks & lua-protobuf 編譯安裝`skynet` ```shell $ git clone https://github.com.cnpmjs.org/cloudwu/skynet.git $ cd skynet && make linux ``` 編譯安裝`luarocks` ```shell $ wget https://luarocks.github.io/luarocks/releases/luarocks-3.5.0.tar.gz $ tar -zxvf luarocks-3.5.0.tar.gz $ cd luarocks-3.5.0 $ ./configure --prefix=/usr/local/luarocks --with-lua-bin=/aseit-data/work_zhang/cppCode/lastBattle_skynet/skynet/3rd/lua --with-lua-include=/aseit-data/work_zhang/cppCode/lastBattle_skynet/skynet/3rd/lua ``` >`--prefix` 設置 `Luarocks` 安裝路徑,`--with-lua-bin` 指定`Luarocks`依賴的 Lua 路徑。`--with-lua-bin`和`--with-lua-include`這兩個參數指定的是skynet項目中所使用的lua5.4庫路徑。 編譯安裝`lua-protobuf` ```shell $ git clone https://github.com.cnpmjs.org/starwing/lua-protobuf.git && cd lua-protobuf $ luarocks make rockspecs/lua-protobuf-scm-1.rockspec ``` ## 在skynet中使用lua-protobuf `lua-protobuf`編譯成功的話,將`pb.so`放在config文件中`lua_cpath`項配置的目錄下面,同時將`protoc.lua`放在config文件`lua_path`配置的目錄下,就可以調用`protoc`中的庫方法。我當前項目這兩項的配置如下: ```lua lua_path = root.."lualib/?.lua;"..root.."lualib/?/init.lua" lua_cpath = root .. "luaclib/?.so" ``` 官方的例子是直接使用protoc加載一個protobuf。我們一般使用protobuf是先寫`.proto`文件,然后用`protoc`命令生成`.pb`文件,然后在項目中使用 `.pb`文件 示例`GCToLS.proto`: ```proto syntax = "proto3"; package GCToLS; enum MsgID { eMsgToLSFromGC_Begin1 = 0; eMsgToLSFromGC_Begin = 1; eMsgToLSFromGC_AskLogin = 2; eMsgToLSFromGC_End = 3; } message AskLogin { MsgID msgid = 1; uint32 platform = 2; string uin = 3; string Sessionid = 4; } ``` 使用`protoc`命令編譯成`.pb`文件 ```shell sudo protoc --descriptor_set_out ./pbs/gctols.pb ./ProtoFile/GCToLS.proto ``` >語法格式 protoc --descriptor_set_out 輸出 輸入 ## 在skynet項目中使用`lua-protobuf`. 1.載入gctols.pb文件 ```lua local pb = require "pb" assert(pb.loadfile "./protos/pbs/gctols.pb") ``` 2.獲取enum類型 ```lua pb.enum("GCToLS.MsgID", "eMsgToLSFromGC_AskLogin") ``` 3.編解碼數據 ```lua function gctols.encode(asklogin) return assert(pb.encode("GCToLS.AskLogin", asklogin)) end function gctols.decode(asklogin) return assert(pb.decode("GCToLS.AskLogin",asklogin)) end ``` 完整示例: ```lua //gctols.lua local pb = require "pb" assert(pb.loadfile "./protos/pbs/gctols.pb") -- 載入剛才編譯的pb文件 local gctols = {} function gctols.msgid() return pb.enum("GCToLS.MsgID", "eMsgToLSFromGC_AskLogin") end function gctols.type(type) return pb.enum("GCToLS.MsgID", type) end function gctols.encode(asklogin) return assert(pb.encode("GCToLS.AskLogin", asklogin)) end function gctols.decode(asklogin) return assert(pb.decode("GCToLS.AskLogin",asklogin)) end return gctols ``` test.lua ``` local gctols = require "gctols" local asklogin = { msgid = "eMsgToLSFromGC_AskLogin", platform = 1, uin = "1", Sessionid = "1" } local encodedata = gctols.encode(asklogin) local decodedata = gctols.decode(encodedata) ``` 這里要注意的是,`.proto`文件中成員變量區分大小寫,在解碼得到的`table`數據,在獲取對應的key數據時需要大小寫對應。在編碼`table`數據時,對應的`key`也要大小對應,不然編碼不通過。比如上面的`Sessionid`這個`key`。 使用lua-protobuf的細節請參考官方[github](https://github.com/starwing/lua-protobuf):
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看