给nginx lua模块添加sendfile函数可代替X-Accel-Redirect(三)
put_filter(r, &out);
return 0;//
}
sendfile函数的参数共有三个, 第一个参数为文件名filename。 第二个参数为文件偏移量offset, offset<0代表从文件头开始发送。 第三个参数为bytes, 要发送的字节数,如果bytes<0, 代表发送到文件尾。
这样在 lua 脚本里就可以这样调用了:
sendfile("/opt/f1.ts", -1,-1) 发送整个文件
或者
sendfile("/opt/f1.ts", 104857600,104857600) 从100MB开始的地方发送100MB的数据
经过测试, 速度和直接nginx发送静态文件的速度一致。
在添加该功能时,碰到过一些小问题,记录下来。
ngx_lua里的C函数返回值代表压入堆栈的返回值的个数, 看我上面的代码, 基本都返回0, 代表我没有给lua的堆栈压入任何参数, 而下面的代码
[cpp]
luaL_error(L, "no request object found");
return 1;
就代表压入了一个参数, 所以返回值为1, 要不然会出现段错误。
