在OpenResty中使用lua-zlib的方法
在OpenResty中使用lua-zlib的方法
==================================================================
1、查看 zlib在centos 中是否存在?
rpm -qa | grep zlib
显示:
zlib-devel-1.2.3-29.el6.x86_64
zlib-1.2.3-29.el6.x86_64
表示已安装,不用过多担心 。
====================================================================
2、安装cmake编译器
yum install -y gcc gcc-c++ make automake
wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
tar -zxvf cmake-2.8.10.2.tar.gz
cd cmake-2.8.10.2
./bootstrap
gmake
gmake install
检查cmake安装
cmake --version
显示
cmake version 2.8.10.2
表示安装成功
====================================================================
3、下载lua-zlib包,并解压
unzip lua-zlib-master.zip
cd /usr/local/software/lua-zlib-master
cmake -DLUA_INCLUDE_DIR=/usr/local/openresty/luajit/include/luajit-2.1
make
cp zlib.so /usr/local/openresty/lualib/zlib.so
====================================================================
4、在lua脚本中调用
location /test { default_type text/html; content_by_lua ' local zlib = require "zlib" local encoding = ngx.req.get_headers()["Content-Encoding"] -- post参数在接收前首先要执行这个 ngx.req.read_body(); if encoding == "gzip" then local body = ngx.req.get_body_data() if body then local stream = zlib.inflate() local r=stream(body); ngx.req.set_body_data(r); end else ngx.say("输入的内容未经过gzip压缩。"); ngx.exit(ngx.HTTP_OK); end --输出参数看看 local args = ngx.req.get_post_args() for key, val in pairs(args) do if type(val) == "table" then ngx.say(table.concat(val, ", ")) else ngx.say(val) end end '; }
====================================================================
5、用c#来模块提交gzip压缩后的数据到服务器
private void button3_Click(object sender, EventArgs e) { var url = "http://192.168.1.100/test"; var body = "body=黄海是我的名字!"; var ret=HttpUtil.PostHttpByGzip(url, body); Console.WriteLine(ret); }
/// <summary> /// 功能:发起POST请求,可选择是否使用在发起时的BODY GZIP压缩 /// 作者:黄海 /// 时间:2015-01-02 /// </summary> /// <param name="url"></param> /// <param name="body"></param> /// <returns></returns> public static string PostHttpByGzip(string url, string body) { var req = WebRequest.Create(url); req.Method = "POST"; // "post" req.Timeout = 20000; req.ContentType = "application/x-www-form-urlencoded"; req.Headers.Add("Content-Encoding", "gzip"); var reqStream = req.GetRequestStream(); var gz = new GZipStream(reqStream, CompressionMode.Compress); var sw = new StreamWriter(gz, Encoding.UTF8); sw.Write(body); sw.Close(); gz.Close(); reqStream.Close(); var myResponse = req.GetResponse(); var sr = new StreamReader(myResponse.GetResponseStream()); var ret=sr.ReadToEnd(); sr.Close(); myResponse.Close(); return ret; }
====================================================================
问题总结:
Makefile是linux下面的文件,对于一个包含很多文件的工程,如果直接编译,那么我们就需要使用一些命令将所有的文件都包括进来。如果我们对其中的一些文件稍做修改,那么我们需要重新输入这些命令。Makefile文件就可以很好的解决这个问题,它将所需要的命令都包含在这个Makefile文件中,然后简单的make一下就完成了所有的步骤。
相关文章
- oracle 19c ora-01017,Oracle 19c RMAN 连接PDB ORA-01017 错误解决方法
- redis执行lua脚本的实现方法
- 解决MySQL表查询速度慢的方法(mysql表查询很慢)
- Linux系统中U盘定位方法(linuxu盘位置)
- 解读Linux版本:掌握最佳使用方法(怎么看linux版本)
- 远程使用Linux系统的方法(怎么远程linux系统)
- 如何在Linux下进行Lua调试(linux调试lua)
- 关联查询MongoDB实现多表联合查询的简单方法(mongodb多表)
- 使用MSSQL获取表数据变化的方法(mssql获取表变化数据)
- Lua语言在Linux下的应用前景(lua语言linux)
- 深入解析MySQL中bit类型数据的使用方法(mysql中bit的用法)
- 脚本Redis集群构建使用Lua脚本实现优化(redis集群执行lua)
- 提升Redis集群性能使用Lua脚本实现(redis集群使用lua)
- 基于Redis集群的Lua脚本编程实践(redis集群lua脚本)
- 突破性技术Redis调用Lua脚本实现无缝集成(redis调lua脚本)
- Oracle 01552错误代码的解析和解决方法(oracle 01552)
- 第一次用.net2.0LOGIN登陆控件的困惑和解决方法
- androidListView自动滚动方法
- MySQL5.5的max_allowed_packet属性的修改方法
- javascript完美拖拽的实现方法
- 网页防止tab键的使用快速解决方法
- Lua中类的实现原理探讨(Lua中实现类的方法)
- Lua中的元表和元方法学习笔记
- Lua中让回调函数支持回调对象方法的解决方法