Nginx中通过lua嵌入C程序

[size=large]为什么要在nginx中使用lua嵌入c程序?[/size]1.性能上的考虑,lua毕竟是一个脚本语言,对于某些特定的功能如果用纯lua来实现性能上一般都会比用c要逊色一些。2.没有现成的库供我们使用,实际上互联网上已经有很多现成的第三方lua库供我们使用,比如读取redis数据的resty.redis;将json转化为lua本地数据格式的cjson等。当找不到合适我...
摘要由CSDN通过智能技术生成
[size=large]为什么要在nginx中使用lua嵌入c程序?[/size]
1.性能上的考虑,lua毕竟是一个脚本语言,对于某些特定的功能如果用纯lua来实现性能上一般都会比用c要逊色一些。
2.没有现成的库供我们使用,实际上互联网上已经有很多现成的第三方lua库供我们使用,比如读取redis数据的resty.redis;将json转化为lua本地数据格式的cjson等。当找不到合适我们使用的第三方库的时候,我们就需要自己动手了。当然如果能够直接使用lua来写一个满足我们自己使用的库也是可以的,如果考虑到性能问题,用c来实现是一个不错的选择。


[size=large]
我们这里打算实现两个方法[/size]
1.对一个字符串做hash并对其hash值取摸,在lua中我们可以这样调用该方法:
local value = demo.mod("abcdefe",8);
其中demo是我们写好的c库;
mod方法的第一个参数是要进行取摸的字符串;
第二个参数是摸;

2.由于lua中的时间函数无法精确到毫秒级,我们这里实现一个可以获取系统毫秒的时间:
local time = demo.time();

[size=large]具体实现[/size]
首先引入lua的c api头文件和我们用到的时间头文件
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#include <sys/time.h>


实现一个murmurhash算法,用来hash我们的字符串
typedef unsigned long long uint64_t;
typedef long long int64_t;
typedef long int int32_t;
static uint64_t murmurhash64A(const void *key,size_t len,int32_t seed){
  

int64_t m = 0xc6a4a7935bd1e995LL;
int r = 47;

uint64_t h = seed ^ (len * m);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值