Thrift lua example

來源:互聯網
上載者:User

歡迎轉載,帶上連結即可http://blog.csdn.net/superye1983/article/details/51190166

最近做個項目,想法是nginx+lua+thrift

thrift是一個比較流行的rpc架構,很多公司都有大規模使用的經驗,不過網上很少有關於thrift-lua的介紹和example

apache的thrift-lua也是剛剛從fbthrift項目引入,在安裝過程中踩了一些坑,記錄一下


首先是版本問題,apache-thrift的最新版本是0.9.3,這個版本支援的lua版本是5.2

不過由於nginx-lua模組用的是luajit,luajit用的lua版本是5.1.4,所以我 用的thrift版本是0.9.2


準備工作,首先安裝lua5.1,預設的安裝會把lua的標頭檔放在/usr/local/include

自己建一個目錄名字為:lua5.1,然後把標頭檔拷貝進去


第一個坑是make時報錯/usr/bin/ld: cannot find -llua5.2

在lib/lua下的Makefile.am中可以看到,這個編譯選項是寫死的,修改後為

libluasocket_la_CPPFLAGS = $(AM_CPPFLAGS) -I/usr/local/include/lua5.1 -DLUA_COMPAT_MODULE
libluasocket_la_LDFLAGS = $(AM_LDFLAGS) ${LUA_LIB} -lm

所有寫著lua5.2的地方都按照上面的寫法改掉,然後就可以通過make了


第二個坑是在make install的時候找不到lualongnumber,這個庫不是Lua內建的,是thrift中的,所以不應該會報錯啊,而且有個朋友可以順利編譯安裝,而我不行

看了報錯資訊,在產生的libluabpack.la檔案中發現了線索

dependency_libs=' /home/kira/src/thrift/thrift-0.9.2/lib/lua/liblualongnumber.la -lm -lssl -lcrypto -lrt -lpthread'

但是看日誌在編譯libluabpack.so之前並沒有先產生liblualongnumber.so,懷疑還是Makefile問題

於是把Makefile.am中的內容修改為:

lib_LTLIBRARIES = \
                        libluasocket.la \
                        liblualongnumber.la \
                        libluabitwise.la \
                        libluabpack.la

其實就是把libluabpack.la和liblualongnumber.la換個位置,修改Makefile.am後重新configure一下,然後就能順利通過安裝了


最後寫一個example,原來thrift已經有一個了在tutorial檔案夾下,不過不巧沒有Lua的例子,只能自己寫

先是組建檔案,然後寫個client,代碼如下

package.path = package.path .. ";./gen-lua/?.lua"package.cpath = package.cpath .. ";/usr/local/lib/?.so"require('TSocket')require('TBinaryProtocol')require('liblualongnumber')require('TTransport')require('tutorial_Calculator')local clientfunction teardown()  if client then    -- Shuts down the server--    client:testVoid()    -- close the connection    client:close()  endendfunction testBasicClient()  local socket = TSocket:new{    port = 9090  }  socket:open()  assert(socket, 'Failed to create client socket')  socket:setTimeout(5000)  local protocol = TBinaryProtocol:new{    trans = socket  }  assert(protocol, 'Failed to create binary protocol')  client = CalculatorClient:new{    protocol = protocol  }  result = client:add(1,1)  print(result)endtestBasicClient()teardown()


運行後報錯找不到lua_rawlen模組,由於lua_rawlen是Lua5.2才有的,所以要把src/luabpack.c這個檔案的代碼修改為size_t len = lua_objlen(L, 2);然後重新編譯安裝

還有Thrift.lua中有一句版本號碼的代碼也是 運行時報錯直接注釋掉


再運行還是報錯

./gen-lua/tutorial_Calculator.lua:125: malformed number near '0x2233d70Processor'

很奇怪產生的程式碼居然以數字開頭,且只有一處是這樣的,修改為_TProcessor



然後起一個Python的Server,運行Client,得到返回結果執行成功

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.