亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發(fā) > 綜合 > 正文

Nginx+lua 實現(xiàn)調(diào)用.so文件

2024-07-21 23:05:03
字體:
供稿:網(wǎng)友

最近在和智能硬件部門一起,做一個室內(nèi)定位的服務(wù),該服務(wù)根據(jù)手機端傳過來的beacon設(shè)備列表,根據(jù)一定的算法計算出具體的商場,并將商場ID和beason設(shè)備列表作為參數(shù),調(diào)用.so文件中的計算方法,得出位置數(shù)據(jù)(坐標:x、y、z),返回給手機端。

因為服務(wù)對QPS要求比較高,并且都是純查詢操作,于是決定使用Nginx+lua+Redis的架構(gòu)(該架構(gòu)在公司內(nèi)部已成主流,比較成熟)。下面我將對lua調(diào)用.so文件的方式,做一下介紹。

lua調(diào)用.so文件,主要有兩種方式:

1.Lua直接調(diào)用動態(tài)鏈接庫,具體可參考 技術(shù)分享 。
2.使用C寫一個Wrapper。

鑒于第一種方式需要引入第三方工具包,并且效率不高,所以我們采用第二種方式來實現(xiàn)。具體實現(xiàn)過程如下:

1.編寫業(yè)務(wù)代碼,其中包括業(yè)務(wù)方法的封裝器。

  static int lua_Locate( lua_State* L )  {    long handle = lua_tonumber( L, 1 );    const char* beacon_rssi_json = lua_tostring( L, 2 );    vector<RSSI_INFO> rssi_info_vec;    FingerprintLocationServer* p = (FingerprintLocationServer*)handle;    ConvertJson2CppRSSI( beacon_rssi_json, rssi_info_vec );    double x;    double y;    float floor;    p->UpdateBeaconSignalGetResult( rssi_info_vec, x, y, floor );    lua_pushnumber(L,x);    lua_pushnumber(L,y);    lua_pushnumber(L,floor);    return 3;  }  static const struct luaL_Reg myLib[] =    {     {"lua_Locate", lua_Locate},     {NULL, NULL}    //數(shù)組中最后一對必須是{NULL, NULL},用來表示結(jié)束     };   int luaopen_mLualib(lua_State *L)   {     luaL_register(L, "FPCalc", myLib);     return 1;    // 把myLib表壓入了棧中,所以就需要返回1   }

其中,wapper函數(shù)的函數(shù)名有個命名規(guī)則,前綴為luaopen,后面就是lua中require的字符串,否則將會報類似于下面的異常:

lua entry thread aborted: runtime error: error loading module 'mLualib' from file '/var/wdd/wrs/webroot/intelligent_lua/mLualib.so':  /var/wdd/wrs/webroot/intelligent_lua/mLualib.so: undefined symbol: _Z13lua_tolstringP9lua_StateiPmstack traceback:coroutine 0:  [C]: in function 'require'  /var/wdd/wrs/webroot/intelligent_lua/location.lua:18: in function...

另外,如果是.cpp文件,在luaopen_mylib一定要加 extern "C", 否則導(dǎo)出的函數(shù)會被重命名,切記切記! 關(guān)于extern "C",請參考 extern "C" 用法解析。

2.Nginx配置文件中指定so包所在的文件夾。

lua_package_cpath '/var/wdd/wrs/webroot/intelligent_lua/?.so;;';

注意,這里有很多種配置方式,只要讓lua能找到so文件即可,比如可以通過lua代碼package.cpath來引入(參閱下面代碼段)或者直接把so文件復(fù)制lua環(huán)境變量指定的目錄里等。
package.cpath = '/usr/local/lib/lua/5.1/?.so;'        --搜索so模塊

如果未指定cpath或者cpath中找不到so文件,系統(tǒng)會報如下異常:

no file './mLualib.lua'  no file '/usr/local/openresty/luajit/share/luajit-2.1.0-beta1/mLualib.lua'  no file '/usr/local/share/lua/5.1/mLualib.lua'  no file '/usr/local/share/lua/5.1/mLualib/init.lua'  no file '/usr/local/openresty/luajit/share/lua/5.1/mLualib.lua'  no file '/usr/local/openresty/luajit/share/lua/5.1/mLualib/init.lua'  no file '/usr/local/openresty/lualib/mLualib.so'  no file './mLualib.so'  no file '/usr/local/lib/lua/5.1/mLualib.so'  no file '/usr/local/openresty/luajit/lib/lua/5.1/mLualib.so'  no file '/usr/local/lib/lua/5.1/loadall.so'  no file '/var/wdd/wrs/webroot/intelligent_lua/mLualib.so'

3.lua代碼中引入so包,并執(zhí)行調(diào)用。

local FPCalc = require "mLualib"local x, y, floor = FPCalc.lua_Locate(c_addr, umm_json)ngx.log(ngx.ERR, "lua_Locate:end:返回結(jié)果:", "x=" .. x, " y=" .. y, " floor=" .. floor)

以上就是lua調(diào)用.so包全部過程了。

實際壓測過程中,還發(fā)現(xiàn)了幾個問題:

1.so包需要在運行環(huán)境上編譯,不同的環(huán)境編譯的so包不一定通用。比如我在mac上編譯的so包,直接復(fù)制到生產(chǎn)環(huán)境(centos系統(tǒng))就不能使用,需要在生產(chǎn)環(huán)境重新編譯才可以。

2.編譯so包單進程可以正常執(zhí)行,但是多進程訪問時異常,錯誤信息如下(目前這個問題還沒有解決)。

2017/05/03 16:52:41 [notice] 14355#0: signal 17 (SIGCHLD) received
2017/05/03 16:52:41 [alert] 14355#0: worker process 14361 exited on signal 11
2017/05/03 16:52:41 [notice] 14355#0: start worker process 14427
2017/05/03 16:52:41 [notice] 14355#0: signal 29 (SIGIO) received
2017/05/03 16:52:41 [notice] 14427#0: sched_setaffinity(0x00000008)

2017-05-04 終于找到原因:

問題原因:進程在訪問.so文件時,需要調(diào)用.so中一個初始化方法。這個方法負責(zé)初始內(nèi)存等相關(guān)操作,每個進程需要單獨調(diào)用(初始化)一次,而我所有進程只調(diào)用(初始化)了一次,導(dǎo)致部分未初始化的進程執(zhí)行代碼時異常。

解決方式:查到原因了,問題就好解決了,每個進程初始一次就好了。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲精选久久| 男男电影完整版在线观看| 久久久久国产美女免费网站| www.av在线播放| 国产精品一区二区在线观看不卡| 亚洲国产精品无码久久久| 青青草精品在线视频| 可骚可骚的黄视频网站| 国产精品综合色区在线观看| 强制高潮抽搐sm调教高h| 欧美一级视频免费看| 久久久久久久久久久久久久久久久久av| 97av免费视频| 欧美日韩一区在线视频| 亚洲电影一级片| 免费黄视频在线观看| 韩国版免费三体| 色婷婷综合久久久久中文字幕| 国产精品久久久久久久免费看| 69夜色精品国产69乱| 欧美色图俺去了| 免费操人视频| 成人性生活av| 欧美xxxx做受欧美.88| 99久久婷婷国产一区二区三区| 欧美在线se| 久久久久久久久黄色| 欧美日韩免费电影| 亚洲三级视频网站| 91在线观看喷潮| 黄色网址在线免费看| 久久久久久久久久久久久女国产乱| 国产一区二区在线视频| 国产精自产拍久久久久久蜜| 亚洲精品国产一区黑色丝袜| 免费在线观看视频| 玖玖在线播放| 亚洲女厕所小便bbb| 久久99偷拍| 亚洲精品第五页| 欧美日韩不卡一区二区| 亚洲第五色综合网| 色一情一交一乱一区二区三区| 国产精品国产精品国产专区不卡| 欧美日韩精品一区| 视频一区二区欧美| 欧美伊人亚洲伊人色综合动图| 美女激情网站| 免费黄网站在线观看| 国产在线观看www| 五月天婷亚洲天综合网鲁鲁鲁| 精品国产91久久久久久老师| 永久免费毛片在线播放不卡| 亚洲午夜极品| 91国产丝袜在线放| se视频在线观看| 九一成人免费视频| 大桥未久在线播放| 在线不卡国产精品| 免费高清视频精品| 国产三级在线观看| 欧美a级网站| 免费成人深夜夜行p站| 污视频网站在线观看| 国产精品欧美亚洲777777| 国产在线二区| 精品按摩偷拍| 久久亚洲精品无码va白人极品| 国产69精品久久久久孕妇| 国产精品一区二区在线免费观看| 国产精品揄拍500视频| 欧美性猛交xxxx免费看| 久久久国产一区二区三区四区小说| 自拍偷拍亚洲综合| 一区二区精品在线| 水蜜桃精品av一区二区| 91爱爱小视频k| av中文在线观看| 亚洲成在人线免费观看| 亚洲福利影院| 很很鲁在线视频播放影院| 日本jizz中国| 欧美成人福利在线观看| 久久青草国产手机看片福利盒子| 中文av一区二区三区| 久久伊人资源站| 久久久久999| 欧美日韩视频在线一区二区| 国产剧情在线观看一区| 在线免费av电影| 国产黄色免费| 日本三级一区二区三区| 色婷婷av一区二区三区在线观看| 成人一区二区三区四区| chinese麻豆新拍video| 日韩欧美另类在线| 91久久久久久久久久久| 日日噜噜噜噜人人爽亚洲精品| 日韩在线国产| 九九热视频在线免费观看| 久久麻豆一区二区| 人妻少妇偷人精品久久久任期| 欧美午夜精品久久久久免费视| 青春草在线视频观看| 亚洲综合婷婷| 亚洲av成人精品日韩在线播放| 色视频网站在线观看| 亚洲一区二区三区中文字幕在线| 97精品免费视频| 精品国产第一区二区三区观看体验| 欧美黄色一级生活片| 国产精品视频免费看| 欧美成人一二三| 美女福利视频在线| 欧美性极品xxxx娇小| 草莓福利社区在线| 久久久久无码精品| 欧美老tube| 中文字幕亚洲乱码| 日韩免费福利视频| 免费看91的网站| 亚洲一区二区小说| 男女18免费网站视频| 欧美日韩精品综合| 国产黄a三级三级三级av在线看| 男人的天堂影院| 日韩欧美一区二区久久婷婷| 97精品久久| 欧美日本一区二区三区| 偷偷色噜狠狠狠狠的777米奇| 日本道在线观看| 国精一区二区三区| 日本视频一区二区| 亚洲人成在线播放| 怡红院av久久久久久久| 蜜臀99久久精品久久久久久软件| 国产高清一区二区三区四区| 老**午夜毛片一区二区三区| 免费一级黄色录像| 亚洲精品国偷自产在线99热| 女女同性女同一区二区三区91| 一区二区三区国产精品| ●精品国产综合乱码久久久久| 久久麻豆一区二区| 无码人妻丰满熟妇奶水区码| sm捆绑调教视频| 草裙成人精品一区二区三区| 男人天堂视频在线| 日韩av不卡电影| √天堂中文www官网| 久久影视一区二区| 国产精品高潮呻吟| 在线看日韩欧美| 一区二区三区在线免费观看| 欧美1级日本1级| 日本高清视频网站www| av中文字幕播放| 国产精品日日摸夜夜爽| 日本亲与子乱a| 亚洲国产97在线精品一区| 亚洲欧美电影| 丝袜在线观看| 97精品人妻一区二区三区在线| 国产精品xxx在线观看www| 特级西西人体高清大胆| 久久爱www.| 国产亚洲精品久久| 400部精品国偷自产在线观看| 欧美福利在线| 日韩一区亚洲二区| 黄色毛片免费看| 国产午夜大地久久| 综合激情视频| 国产一线二线三线女| 精品无码久久久久| 天堂中文在线www| 黄色日韩网站| 黄色录像免费观看| www.av视频| 人人做人人爽人人爱| 亚洲熟妇无码av在线播放| 国产精品一区二区在线免费观看| 国产大片中文字幕在线观看| 免费在线观看h| 久久爱www| 亚洲va久久久噜噜噜久久天堂| 国产大片中文字幕| 在线日本高清免费不卡| 国产精品成人国产| 91玉足脚交白嫩脚丫在线播放| 欧美一区二区三区黄片| 97在线中文字幕| 中文字幕成人精品久久不卡| jizzjizz日本护士免费| 蜜桃视频在线观看www| 精品国产乱码一区二区三区四区| 少妇人妻一区二区| 黑人精品欧美一区二区蜜桃| 性欧美videos白嫩| 国产一精品一av一免费爽爽| 天天av天天翘天天综合网色鬼国产| 欧美电影一区| 久久不见久久见免费视频7| 亚州色图欧美色图| 中国女人内谢69xxx视频| 精品国产乱码一区二区三区| 久久久久久久久久久久久国产| 中文字幕乱码视频| www日本在线观看| 欧美激情视频免费看| 日本黄色三级视频| 亚洲三级 欧美三级| 美女不穿衣服的网站| av三级在线观看| 成人免费看aa片| 久久久国产高清| 久久蜜桃资源一区二区老牛| 亚洲免费成人网| 国产精品午夜av在线| 亚洲女人小视频在线观看| 久久精品一区二区三区不卡牛牛| 少妇精品放荡导航| 国产午夜精品一区理论片飘花| 亚洲精品天堂在线观看| 国产精品日韩一区二区| 国产精自产拍久久久久久蜜| av在线播放网址| 国产91在线观看| 欧美激情精品久久久久久久变态| 国产欧美视频一区| 国产艳俗歌舞表演hd| 精品国产一区二区三区忘忧草| 国产精品乱码一区二三区小蝌蚪| 精品电影一区二区三区| 蜜桃视频在线观看91| 日产精品久久久一区二区| 亚洲在线视频观看| 57pao成人永久免费视频| 尤物视频免费在线观看| www成人在线观看| 精品无码一区二区三区电影桃花| 精品福利av导航| 日韩女优制服丝袜电影| 精品国模在线视频| 99在线观看视频免费| 日韩一区二区精品葵司在线| 久久综合电影一区| 黄页网站免费观看| 国产调教一区二区三区| 欧美a视频在线观看| 色综合视频网站| 国产精品美女久久久久av爽李琼| 国产丝袜美腿一区二区三区| 狠狠综合久久av| 99久热这里只有精品视频免费观看| 久久综合狠狠综合| 91在线观看免费观看| 日韩精品免费在线视频观看| 亚洲欧美一区二区三区极速播放| 欧美日韩国产美| 欧美日韩视频免费| 亚洲色图偷窥| 网站一区二区三区| 91精品国产91久久久久久最新| 欧美一区二区在线不卡| 欧美精三区欧美精三区| 桃色一区二区| 中文字幕第一页久久| 狠狠做深爱婷婷综合一区| 91禁外国网站| 中文字幕亚洲精品视频| 日本三级久久久| 一级视频在线观看| 国产一级一片免费播放放a| 精品日韩久久久| 91系列在线播放| 国产ts人妖调教重口男| 欧洲杯什么时候开赛| 奇米影视四色在观看线| 久久视频在线免费观看| 青春有你2免费观看完整版在线播放高清| 极品一线天粉嫩虎白馒头| 99视频精品全部免费在线视频| 亚洲男人的天堂一区二区| 欧美韩日一区二区三区四区| 97国产精东麻豆人妻电影| 欧美色精品在线视频| 在线免费国产| 亚洲日本黄色片| 一根才成人网| 午夜在线视频| 潘金莲一级黄色片| 日韩一级精品视频在线观看| 国产精品呻吟久久| 免费在线观看一区二区| 九九九热999| 美女黄色丝袜一区| 久久久久观看| 久久99精品久久久久久久久久久久| 亚洲视频777| 日韩黄色网址| 三级在线观看一区二区| 一二三四中文在线| 欧美二三四区| 制服.丝袜.亚洲.中文.综合懂| 久操久操久操| 91精品国产九九九久久久亚洲| 色综合久久久久无码专区| 亚洲一区二区三区av无码| 国产精品777777| 中文字幕第22页| 日韩精品一区二区在线观看| 午夜av一区二区| 亚洲精品久久嫩草网站秘色| 日韩欧美自拍偷拍| xxxxx中文字幕| 日本dvd播放| 国产一级黄色av| 日本不卡三区| 波多野结衣一区| 亚洲女人在线观看| av中文字幕av| 无码人妻久久一区二区三区蜜桃| 五月天六月丁香| 日韩成人手机在线| 色就是色欧美| 99精品99久久久久久宅男| 4hu四虎永久在线观看|