nginx+lua(openresty) lua-protobuf 安装及使用(三)

news2024/11/16 9:35:53

前言
前2章已经讲述 openresty 安装及使用
这章主要讲述 openresty 环境下 lua-protobuf 安装及使用

1:环境
ubuntu18
lua-protobuf https://github.com/starwing/lua-protobuf
protobuf https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.1 ##最的版本自行选择
openresty http://openresty.org/cn/download.html

2:安装openresty
1>openresty
安装官方说明安装即可
http://openresty.org/cn/linux-packages.html在这里插入图片描述
2>源代码安装
源码 下载地址 :http://openresty.org/cn/download.html
安装说明 : http://openresty.org/cn/installation.html
在这里插入图片描述
在 Linux 上,通常需要使用 sudo 来获取 root 权限来完成安装。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
增加环境变量
cd ~
vim .bashrc
PATH=/usr/local/openresty/nginx/sbin:$PATH
export PATH
在这里插入图片描述
启动openresty
cd ~
mkdir work
cd work
mkdir src_lua ###后面的lua脚本全放到这目录下
mkdir conf
vim nginx.conf
内容如下

worker_processes  1;
error_log logs/error.log;
events {
    worker_connections 1024;
}
http {
    server {
        listen 8080;
	lua_code_cache off; ###lua_code_cache on;#调试模式(即关闭lua脚本缓存)  //生产环境 on  #修改lua文件不需要重新,立即生效
		
		keepalive_timeout 60s;  # 配置段: http, server, location 指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,
		#有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。
        client_body_timeout 20s;# 配置段: http, server, location 指定客户端与服务端建立连接后发送 request body 的超时时间。
		#如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)
		client_header_timeout 10s;# 配置段: http, server, location  客户端向服务端发送一个完整的 request header 的超时时间。
		#如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)
        location /test {
            default_type text/html;
            content_by_lua_block {
                ngx.say("<p>hello, world</p>");
 		ngx.say("nginx prefix ==> ",ngx.config.prefix());
            }
        }

	location /testlua {
		proxy_set_header            X-real-ip $remote_addr;                                           # 可直接获取客户端IP
		proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;    # 通过代理服务器获取客户端IP
			#lua_code_cache off; ###lua_code_cache on;#调试模式(即关闭lua脚本缓存)  //生产环境 on
           content_by_lua_file src_lua/http.lua;
        }
	
	location /testproto {
		proxy_set_header            X-real-ip $remote_addr;                                           # 可直接获取客户端IP
		proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;    # 通过代理服务器获取客户端IP
			#lua_code_cache off; ###lua_code_cache on;#调试模式(即关闭lua脚本缓存)  //生产环境 on
           content_by_lua_file src_lua/testprotobuf.lua;
        }
    }
}

启动命令 pwd 两边有单引号
在这里插入图片描述

cd ~/work
nginx -p pwd/ -c conf/nginx.conf #启动,指定加载脚本
nginx -p pwd/ -c conf/nginx.conf -s stop #停止
nginx -p pwd/ -c conf/nginx_debug.conf -s reload #重加载
或自行创建sh
如启动start.sh 内容如下
nginx -p pwd/ -c conf/nginx.conf

验证配置
nginx -t ##验证默认配置文件
nginx -t -c ~/work/conf/nginx.conf ###验证自定义配置文件

2:安装lua-protobuf
下载解压 https://github.com/starwing/lua-protobuf 在这里插入图片描述
gcc -O2 -shared -fPIC pb.c -o pb.so -I /usr/local/openresty/luajit/include/luajit-2.1

/usr/local/openresty/luajit/include/luajit-2.1 确认位置是否一样或换个位置

拷贝4个文件到lualib 目录下
sudo cp pb.so /usr/local/openresty/lualib
sudo cp protoc.lua /usr/local/openresty/lualib
sudo cp luaunit.lua /usr/local/openresty/lualib
sudo cp serpent.lua /usr/local/openresty/lualib
在这里插入图片描述
4:protobuf 用例
protobuf 编码解码 参考
网上抄个别人的
login.proto

syntax = "proto3";
package msg;
 
import "account.proto";  //proto full name
 
message Login_C {
    Account account = 1;
}
 
message Login_S {
    bool result = 1;
}

account.proto

syntax = "proto3";
package msg;
 
message Account {
    string username = 1;
    string password = 2;
}

编译命令
./protoc -I ./ -o proto.pb ./account.proto ./login.proto

在这里插入图片描述
把生成的proto.pb 拷贝到 src_lua/pb目录下
两个 .proto文件不需要,只所以拷贝过来是为了查看方便
在这里插入图片描述

5:测试
1>测试脚本
testprotobuf.lua


local lu = require "luaunit"

local pb     = require "pb"
local pbio   = require "pb.io"
local buffer = require "pb.buffer"
local slice  = require "pb.slice"
local conv   = require "pb.conv"
local protoc = require "protoc"

local serpent  =  require "serpent"

--ngx.say("123")

local path = ngx.config.prefix() .. "src_lua/pb/proto.pb"
--ngx.config.prefix());  --/home/ubuntu18/work/
--local P = protoc.new()
local file, msg = io.open(path, "rb")
if file ~= nil then
    local buffer = file:read("*a")
    pb.load(buffer)
    file:close()
else
    ngx.log(ngx.ERR, "读取文件失败: ", msg)
     ngx.say("读取文件失败: ", msg)
    return
end

ngx.say("124")
--ngx.say("pb.type",pb.type)

local data = {
    account = {
        username = "test",
        password = "123456"
    }
}

local data1 ={
	result = 0
}

local  bytes = pb.encode("msg.Login_S", data1)  --08 01
local bytes1 = assert(pb.encode("msg.Login_C", data))  --0A 0E 0A 04 74 65 73 74 12 06 31 32 33 34 35 36
ngx.say(pb.tohex(bytes))
ngx.say(pb.tohex(bytes1))

local data2 =  pb.decode("msg.Login_C", bytes1)
ngx.say(serpent.block(data2))
--[[
{
  account = {
    password = "123456",
    username = "test"
  } --table: 0x7fe5b6f2c808
} --table: 0x7fe5b6f2c788
--]]

lua脚本写法可以参考 lua-protobuf 下的test.lua
在这里插入图片描述

2>运行
curl http://127.0.0.1:8080/testproto
在这里插入图片描述

6:DEMO工程 后续如有需要再上传
如果觉得有用,麻烦点个赞,加个收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科技资讯|苹果Vision Pro头显处方镜片外观曝光

苹果公司在几周前推出了售价 3499 美元的 Vision Pro 头显&#xff0c;这款头显可以让用户体验增强现实和虚拟现实的内容。对于许多佩戴眼镜的用户来说&#xff0c;他们最关心的问题是&#xff0c;近视眼能够使用 Vision Pro。 Vision Pro 的一个亮点是&#xff0c;它可以配备…

前端修改单选框和多选框的样式(美化)

html提供了单选框和多选框的写法&#xff0c;但是样式并不好看&#xff0c;如图所示&#xff1a; 有时候设计图并不是这样的&#xff0c;需要修改&#xff0c;比如&#xff1a; 这里给大家提供思路&#xff0c;隐藏input框&#xff0c;文字加label标签&#xff0c;使得点击文字…

SPSSPRO数据分析之——CSI指纹数据分析(预处理、降维等)

目录 一、前言 二、数据准备 三、进行预处理 四、进行降维任务 五、正态性检测 六、描述性统计 七、频数分析 八、代码功能 一、前言 SPSSPRO是一款全新的在线数据分析平台&#xff0c;可以用于科研数据的分析、数学建模等&#xff0c;对于那些不会编程或者刚进入科…

浅析数据中台

note 很多企业更倾向于数据集中采集、存储&#xff0c;分层建设&#xff0c;集中管理运营数据资产。阿里的中台是从管理的角度出发&#xff0c;以中台事业部集中数据搜索&#xff0c;技术及产品&#xff0c;数据共享等多个部门的功能。 文章目录 note一、数据中台1. 传统企业的…

数字孪生百科之海康威视安防系统

智能安防是指利用先进的技术手段和系统&#xff0c;以提升安全防护能力和监控效果的安全领域。数字化则是指将信息以数字形式进行处理和存储的过程。智能安防与数字化密切相关&#xff0c;通过数字化的手段和技术&#xff0c;可以实现对安全领域的全面监控、数据分析和智能决策…

Xcode 15 beta 2 - Apple Vision Pro安装下载

1. 更新OS系统 已更新的忽略这步 2. 下载Xcode 15 beta 2 Xcode 15 Xcode 15 让你能够开发、测试和分发适用于所有 Apple 平台的 App。借助增强的代码补齐功能、交互式预览和实时动画&#xff0c;更快地推进 App 的编码和设计。利用 Git 暂存功能直接改进下次要提交的文件&…

汽车通用LCD显示驱动电路芯片DP6524替代PT6524

DP6524是一款利用CMOS技术专门设计的通用LCD驱动IC&#xff0c;完全替代PT6524,采用单片机控制的电子调谐器。它的最大行驶速度可以达到204段输出&#xff0c;可控制多达12个通用输出端口。引脚分配和应用电路都进行了优化&#xff0c;易于PCB布局和节省成本的优势。 主要特性…

iPhone手机如何移除桌面便签软件小组件?

对于很多iPhone手机用户来说&#xff0c;app小组件是非常便捷实用的一个功能&#xff0c;它可以让用户在不打开软件的情况下查看里面的相关内容。如果在iPhone手机上添加了多个桌面便签小组件&#xff0c;想要移除一个的话应该怎么操作呢&#xff1f;以iPhone手机端敬业签便签软…

前端excel文件处理,vue2 、file-saver、xlsx, excel文件生成与excel文件链接数据导出

1、前端excel文件生成 安装插件 npm install file-saver --save如使用TS开发&#xff0c;可安装file-saver的TypeScript类型定义 npm install types/file-saver --save-dev下载文件流 import { saveAs } from file-saver /**** param {*} fileStream // 文件流* param {*} …

vue+leaflet地图实现根据省份区域划分颜色渐变图

效果图 实现代码如下 let separatedColors [rgb(255, 153, 209)];// 离散颜色&#xff0c;如效果图上的粉色 let maxVal 300000;// 定义一个最大值 data.forEach((item) > {for (let i 10; i > 0; i--) {if (item.us_year < maxVal * i) {item.opacity i / 10;}…

ThinkPHP-Shop2020版本的商城CMS前端SQL注入

0x01、漏洞名描述 ThinkPHP-Shop2020版本的商城CMS前端SQL注入 0x02、fofa "ThinkPHP-Shop"0x03、POC http://x.x.x.x//mobile/index/index2/id/1* 0x04、漏洞复现

数字孪生和 GIS 结合能够为智慧社区带来怎样的改变?

数字孪生和地理信息系统&#xff08;GIS&#xff09;是当今智慧社区发展中的两个重要技术&#xff0c;它们的结合将为智慧社区带来根本性的改变和巨大的发展机遇。这种结合将深刻影响社区的规划、建设、运营和管理&#xff0c;为居民创造更智能、便利、宜居的生活环境。 首先&…

Windows 10 使用Docker记录

1. 下载Docker Desktop Installer&#xff0c;按照步骤安装。 2. 安装位置只能在系统盘&#xff0c;镜像存储位置可更改&#xff0c;如下图&#xff0c;在设置中。 3. 启动桌面后会有提示&#xff0c;打开终端(cmd)&#xff0c;输入 wsl -upgrade可解决。 4. 拉取仓库中的镜像…

【C++学习】类和对象 | 拷贝构造 | 探索拷贝构造函数为什么需要引用传参 | 深拷贝 | 初识运算符重载

写在前面&#xff1a; 上一篇文章我们开始学习类内的默认成员函数&#xff0c; 这里是传送门&#xff0c;有兴趣可以去看看&#xff1a;http://t.csdn.cn/iXdpH 这篇文章我们继续来学习类和对象的知识。 目录 写在前面&#xff1a; 1. 拷贝构造 2. 拷贝构造函数为什么需…

线性回归算法实现

回归算法是一种有监督算法。 回归算法是一种比较常用的机器学习算法&#xff0c;用来建立“解释”变量(自变量X)和观 测值(因变量Y)之间的关系&#xff1b;从机器学习的角度来讲&#xff0c;用于构建一个算法模型(函 数)来做属性(X)与标签(Y)之间的映射关系&#xff0c;在算法的…

Search space set group switching(二)

R17规定UE可以根据DCI 0_2/0_1/1_1/1_2 的PDCCH monitoring adaptation field 结合具体的配置&#xff0c;对Type3-PDCCH CSS sets 或 USS sets 的acitve DL BWP进行skipping PDCCH monitoring或search space set group switch(包括2个SSSG或3个SSSG的switching)的操作。3个SSS…

腾讯云轻量应用服务器便宜是不是性能差?

腾讯云轻量应用服务器便宜&#xff1f;大揭秘&#xff01;为什么便宜&#xff1f;因为限制月流量&#xff0c;虽然公网带宽看似很大&#xff0c;有月流量限制&#xff0c;但是也不得不说&#xff0c;轻量应用服务器性价比确实高&#xff0c;大家估算下自身应用&#xff0c;如果…

打包apk时出现Execution failed for task ‘:app:lintVitalRelease

程序可以正常运行&#xff0c;但是打包apk的时候报Execution failed for task ‘:app:lintVitalRelease导致打包失败&#xff0c;原因是执行lintVitalRelease失败了&#xff0c;存在错误。解决办法&#xff1a;在app模块的build.gradle的Android里面添加如下代码&#xff1a; l…

如何在linux上查看显卡型号

使用命令lspci | grep VGA 在我的主机上得到如下信息: 08:00.0 VGA compatible controller: NVIDIA Corporation Device 2504 (rev a1)发现我的显卡型号是2504&#xff0c;这和我们印象中的显卡型号如1080Ti之类的不一样&#xff0c;看起来不像真正的型号。我们需在pci这个网…

火爆全网,Python自动化测试-openpyxl操作测试(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 当做自动化测试时…