Nginx+lua 调用.so文件

最近在和智能硬件部门一起,做一个室内定位的服务,该服务根据手机端传过来的beacon设备列表,根据一定的算法计算出具体的商场,并将商场ID和beason设备列表作为参数,调用.so文件中的计算方法,得出位置数据(坐标:x、y、z),返回给手机端。

因为服务对QPS要求比较高,并且都是纯查询操作,于是决定使用Nginx+lua+Redis的架构(该架构在公司内部已成主流,比较成熟)。下面我将对lua调用.so文件的方式,做一下介绍。

lua调用.so文件,主要有两种方式:
1. Lua直接调用动态链接库,具体可参考 技术分享
2. 使用C写一个Wrapper。

鉴于第一种方式需要引入第三方工具包,并且效率不高,所以我们采用第二种方式来实现。具体实现过程如下:

1.编写业务代码,其中包括业务方法的封装器。

    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);
        lu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值