在 openresty 中使用 capnp lua 库
1. 安装必要的工具和库
apt-get install capnproto luarocksluarocks install lua-capnproto
luarocks install lua-cjson
lua-cjson 库不是必须的,是由于后面的演示程序要使用,就一起装上了。
可以看下库的安装位置:
root@350983744ebf:~# luarocks show lua-capnprotolua-capnproto 0.1.4-5 - Lua-capnproto is a pure lua implementation of capnproto based on LuaJIT.Lua-capnproto is a pure lua implementation of capnproto based on LuaJIT.License: BSD
Homepage: https://github.com/calio/lua-capnproto
Installed in: /usr/localModules:capnp (/usr/local/share/lua/5.1/capnp.lua)capnp.compile (/usr/local/share/lua/5.1/capnp/compile.lua)capnp.util (/usr/local/share/lua/5.1/capnp/util.lua)handwritten_capnp (/usr/local/share/lua/5.1/handwritten_capnp.lua)handwritten_data_generator (/usr/local/share/lua/5.1/handwritten_data_generator.lua)random (/usr/local/share/lua/5.1/random.lua)schema_capnp (/usr/local/share/lua/5.1/schema_capnp.lua)test (/usr/local/share/lua/5.1/test.lua)tool (/usr/local/share/lua/5.1/tool.lua)Depends on:lua ~> 5.1 (using 5.1-1)
默认库都是安装到了 /usr/local/share/lua/5.1/ 目录下。
2. 编译 capnp 文件
先将 openresty 自带的 luajit 程序目录加入 PATH 路径中:
export PATH=$PATH:/usr/local/openresty/luajit/bin
新建一个AddressBook.capnp 文件,内容如下:
@0xdbb9ad1f14bf0b36; # unique file ID, generated by `capnp id`struct Person {id @0 :UInt32;name @1 :Text;email @2 :Text;phones @3 :List(PhoneNumber);struct PhoneNumber {number @0 :Text;type @1 :Type;enum Type {mobile @0;home @1;work @2;}}employment :union {unemployed @4 :Void;employer @5 :Text;school @6 :Text;selfEmployed @7 :Void;# We assume that a person is only one of these.}
}struct AddressBook {people @0 :List(Person);
}
然后编译 capnp 文件:
root@350983744ebf:~# capnp compile -olua AddressBook.capnp
root@350983744ebf:~# ls -lh
total 36K
-rw-r--r-- 1 root root 532 Oct 22 21:18 AddressBook.capnp
-rw-r--r-- 1 root root 21K Oct 22 21:20 AddressBook_capnp.lua
得到 AddressBook_capnp.lua 文件。
3. 写一个测试程序
新建一个目录,将 AddressBook_capnp.lua 文件放到这个目录。
root@350983744ebf:~# mkdir /usr/local/openresty/lua
root@350983744ebf:~# cd /usr/local/openresty/lua
root@350983744ebf:/usr/local/openresty/lua# cp /root/AddressBook_capnp.lua .
在这目录新建一个 lua 程序文件 main.lua,内容如下:
local addressBook = require "AddressBook_capnp"
local capnp = require "capnp"
local cjson = require "cjson"
local util = require "capnp.util"local data = {people = {{id = 123,name = "Alice",email = "alice@example.com",phones = {{number = "555-1212",["type"] = "MOBILE",},},employment = {school = "MIT",},},{id = 456,name = "Bob",email = "bob@example.com",phones = {{number = "555-4567",["type"] = "HOME",},{number = "555-7654",["type"] = "WORK",},},employment = {unemployed = "Void",},},}
}local bin = addressBook.AddressBook.serialize(data)
local decoded = addressBook.AddressBook.parse(bin)ngx.say(cjson.encode(decoded))
这个程序将一个 lua 数据【数据格式是按照 AddressBook.capnp 文件定义的】序列化成 capnp 二进制数据,然后将二进制数据反序列化成 lua 数据,最后使用 cjson 库将 lua 数据序列化成 json 格式,使用 nginx 输出。
4. 验证程序
修改 nginx 配置文件【 /usr/local/openresty/nginx/conf/nginx.conf】内容为:
worker_processes 1;events {worker_connections 1024;
}http {lua_package_path "/usr/local/openresty/lua/?.lua;;";server {listen 80;server_name localhost;location /capnp {content_by_lua_file /usr/local/openresty/lua/main.lua;}}
}
启动 nginx 并验证结果:
root@350983744ebf:~# /usr/local/openresty/nginx/sbin/nginx root@350983744ebf:~#
root@350983744ebf:~# curl 127.0.0.1/capnp
{"people":[{"phones":[{"number":"555-1212","type":"MOBILE"}],"id":123,"name":"Alice","employment":{"school":"MIT"},"email":"alice@example.com"},{"phones":[{"number":"555-4567","type":"HOME"},{"number":"555-7654","type":"WORK"}],"id":456,"name":"Bob","employment":{"unemployed":"Void"},"email":"bob@example.com"}]}
和预期相符。
相关文章:
在 openresty 中使用 capnp lua 库
1. 安装必要的工具和库 apt-get install capnproto luarocksluarocks install lua-capnproto luarocks install lua-cjsonlua-cjson 库不是必须的,是由于后面的演示程序要使用,就一起装上了。 可以看下库的安装位置: root350983744ebf:~# …...
私藏小技巧:让微信朋友圈营销方便化的小窍门!
微信,这个拥有十亿用户的社交软件,已经成为生活中不可或缺的一部分。 而朋友圈,这个微信的基础功能,是聚宝盆,也是一切流量的尽头。 现在公域+私域的流量增长变现体系很火。朋友圈是一切公域流量的尽头&a…...
Centos使用tomcat部署jenkins
jenkins的最新版本已经不在支持jdk8,支持的jdk环境如下: 安装jdk环境 yum -y install java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64安装tomcat tomcat官网 cd /optwget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.82/bin/apache-tomcat…...
uni-app打包apk实现自动更新
一、直接复制粘贴就可用(豪横) app.vue文件里写 //app.vue里写 <script>export default {onShow: function() {console.log(App Show)},onHide: function() {console.log(App Hide)},onLaunch: function() {let appVersion uni.getSystemInfo({success: function(e) {ap…...
SRS srs-bench
1 srs-bench 音视频压测工具,包括RTMP/FLV/WebRTC/GB28181等,未来还会完善。 SB(SRS Bench) is a set of benchmark and regression test tools, for SRS and other media servers, supports HTTP-FLV, RTMP, HLS, WebRTC and GB28181. For RTMP/HLS/F…...
HackTheBox-Starting Point--Tier 1---Appointment
文章目录 一 题目二 实验过程 一 题目 Tags Web、Databases、Injection、Apache、MariaDB、PHP、SQL、Reconnaissance、SQL Injection译文:Web、数据库、注入、Apache、MariaDB、PHP、SQL、侦察、SQL 注入Connect To attack the target machine, you must be on …...
【工具】Java请求带http重定向的地址 自动进行重定向
【工具】Java请求带http重定向的地址 自动进行重定向 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;public class HTTPGETWithMultipleHeaders {public static voi…...
接口自动化测试方案
1、引言 1.1 文档版本 版本 作者 审批 备注 V1.0 XXXX 创建测试方案文档 1.2 项目情况 项目名称 XXX 项目版本 V1.0 项目经理 XX 测试人员 XXXXX,XXX 所属部门 XX 备注 1.3 文档目的 本文档主要用于指导XXX-YY项目常用接口自动化测试…...
TikTok文化探索:热议时事与社会话题
在当今数字时代,社交媒体平台如TikTok已经成为了我们日常生活中不可或缺的一部分。它不仅仅是一个娱乐应用,也是一扇窥视世界、探讨时事和社会话题的窗户。本文将深入探讨TikTok如何成为文化探索的平台,热议时事和社会话题,以及它…...
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
第一步:在mongodb的官网里面创建云服务器 点进去 这是免费的,由于是一个项目只可以创建一个,这里我已经创建好了 用本地的mongodb服务也是可以的 第二步:点击connect,下载连接mongodb的软件:MongoDBCompass 第三步&am…...
QWEN technical report
通义千问-Qwen技术报告细节分享 - 知乎写在前面大家好,我是刘聪NLP。 阿里在很早前就开源了Qwen-7B模型,但不知道为什么又下架了。就在昨天阿里又开源了Qwen-14B模型(原来的7B模型也放出来了),同时还放出了Qwen的技术报…...
提升MODBUS-RTU通信数据刷新速度的常用方法
SMART PLC的MODBUS-RTU通信请参考下面文章链接: 【精选】PLC MODBUS通信优化、提高通信效率避免权限冲突(程序+算法描述)-CSDN博客MODBUS通讯非常简单、应用也非常广泛,有些老生常谈的问题,这里不再赘述,感兴趣的可以参看我的其它博文:SMART200PLC MODBUS通讯专题_RXXW…...
PyTorch 与 TensorFlow:机器学习框架之战
深度学习框架是简化人工神经网络 (ANN) 开发的重要工具,并且其发展非常迅速。其中,TensorFlow 和 PyTorch 脱颖而出,各自在不同的机器学习领域占有一席之地。但如何为特定项目确定理想的工具呢?本综合指南[1]旨在阐明它们的优点和…...
超简单理解冒泡排序
1.冒泡排序(Bubble Sort) 较简单排序算法。 它会遍历若干次要排列的数列,每次遍历,会从前往后比较相邻两个数的大小。 如果前者比后者大,就交换他们位置。遍历一次最大元素在数列末尾。重复直到数列有序。 那么遍历需要一个变量控制范围。…...
模拟IC设计工程师成长日记
很多IC设计的新人,不知道进入IC设计行业后会有哪些成长和学习的地方。 很多初入IC设计职场的人也都会比较恐慌,成长进步需要一个时间和经验的积累 今天给大家找了一个叫“模拟IC设计“攻城狮”的成长日记供大家参考. 以模拟IC设计工程师的身份进入职场&a…...
修炼k8s+flink+hdfs+dlink(六:学习namespace,service)
一:什么是namespace? 你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 他们可以为您和您的团队提供组织,安全甚至性能方面的帮助! 二&a…...
法语导游就业前景如何?
随着国际交流的日益频繁,旅游业正在迅猛发展。尽管全球讲法语的人数并不算多,但讲法语的国家分布广泛。因此,如何成为一名合法的法语导游,以及法语导游的就业前景如何,成为了法语爱好者比较关注的问题。 我们知道&…...
iOS自动混淆测试处理笔记
1 打开 ipa,导出ipa 路径和配置文件路径会自动填充 2 点击 开始自动混淆测试处理 自动混淆测试是针对 oc 类和oc方法这两个模块进行自动混淆ipa,并ipa安装到设备中运行,通过检测运行ipa包是否崩溃,来对oc类和oc方法进行筛选。如果…...
C51--单片机中断
51单片机是单线程模式,需要用到硬件中断。 一、中断系统 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理器CPU正在处理某件事的时候,外界发生了紧急事件请求,要求CPU暂停当前工作,转而去处理这个紧急…...
Linux中关于glibc包导致的服务器死机或者linux命令无法使用的情况
glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX …...
Python AOT编译卡在wasm-ld阶段?揭秘2026年新引入的WASI-SDK v22.0工具链冲突——附3行patch脚本+验证清单
第一章:Python AOT编译卡在wasm-ld阶段?揭秘2026年新引入的WASI-SDK v22.0工具链冲突——附3行patch脚本验证清单自2026年WASI-SDK v22.0发布以来,Python官方AOT编译流程(基于pyodide-build aot)在链接阶段频繁阻塞于w…...
从GOPATH到Go Mod:老项目迁移必知的5个文件结构陷阱
从GOPATH到Go Mod:老项目迁移必知的5个文件结构陷阱 当Golang社区在2018年推出Go Modules时,很少有人预料到这个看似简单的包管理工具会成为Go语言发展史上的分水岭。四年后的今天,仍有大量遗留项目困在GOPATH的泥潭中,而迁移过程…...
如何使用Compiler Explorer实时编译原理:揭秘代码到汇编的转换过程
如何使用Compiler Explorer实时编译原理:揭秘代码到汇编的转换过程 【免费下载链接】compiler-explorer Run compilers interactively from your web browser and interact with the assembly 项目地址: https://gitcode.com/gh_mirrors/co/compiler-explorer …...
终极ThinkPad风扇控制指南:如何让你的笔记本更安静更高效?
终极ThinkPad风扇控制指南:如何让你的笔记本更安静更高效? 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾经被ThinkPad风扇的噪音困扰…...
JavaWeb Listener 监听器详解:三大域对象监听 + 在线人数统计实战
前言Listener(监听器)是 JavaWeb 三大组件最后一个,专门用于监听 Web 域对象的创建、销毁、属性变化,在事件触发时自动执行逻辑。它是基于观察者模式实现,常用于:服务器初始化、在线用户统计、Session 监听…...
2026年主流接口测试平台慢因分析与选型参考
2026年主流接口测试平台慢因分析与选型参考 核心观点摘要 2026年接口测试响应慢核心诱因可归为三类:工具本身并发调度能力不足、协议适配不全导致额外转码开销、缺少AI智能链路优化能力,多数企业接口测试效率低与工具选型不当直接相关。本次盘点覆盖当前…...
Kali实战:CTF杂项题必备工具全解析
1. Kali Linux与CTF杂项题简介 第一次参加CTF比赛时,面对五花八门的杂项题完全无从下手。直到发现Kali Linux这个"瑞士军刀",才真正打开了解题新世界。Kali Linux预装了300安全工具,其中约20%专门用于处理隐写术、文件分析等杂项题…...
从音乐均衡器到语音降噪:深入浅出玩转数字谐振器设计与MATLAB仿真
从音乐均衡器到语音降噪:深入浅出玩转数字谐振器设计与MATLAB仿真 你是否曾在调整音乐播放器的均衡器时好奇——那些滑动条如何精确控制特定频段的声音强弱?这背后隐藏的数字信号处理魔法,正是我们今天要探索的数字谐振器技术。无论是提取语音…...
一文讲透|一键生成论文工具:2026年最新测评与推荐大全
2026年真正好用的一键生成论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。…...
体验开发新范式:如何用快马平台的AI大模型将想法直接变成代码
最近尝试用AI辅助开发工具来快速实现一个任务管理应用,整个过程让我对现代开发方式有了全新认识。和大家分享一下这个有趣的实践经历: 需求分析阶段 传统开发需要先梳理功能清单,但这次我直接把自然语言描述输入到InsCode(快马)平台的AI对话框…...
