该格式可以是任何序列化格式 , 例如json、yaml , 只要它与运行时匹配 。
- 运行时
库和配置的组合将引入一个新的运行时 , 该运行时代表一些线程或用于执行作业的协程 。
您可以使用具有不同配置的同一库 , 这非常常见 , 特别是对于Java和Python 。
- 请求响应模式
Nginx工作进程和运行时之间的耦合基于消息交换 , 其中包含两个方向:
1 , 请求
Lua协程创造了一项任务
将任务与请求消息相关联 , 即C malloc()字符数组 。请注意 , 这个字符数组将由lua-resty-ffi释放 , 运行时只是使用它 。
将任务放入运行时的线程安全队列并生成
运行时轮询此队列
为什么不调用其他语言提供的API?
在Go中 , 由于GMP模型 , 它可能会阻止nginx工作进程
它增加了其他语言提供此类API的负担
2 , 回应
运行时将响应(也称为C malloc()字符数组)直接注入ngx_thread_pool_done队列 , 并通过eventfd通知nginx epoll循环 , 然后nginx将恢复lua协程 。请注意 , lua-resty-ffi将释放响应 , 因此在您的运行时无需关心它 。
?压测
和unix socket domain 对比性能报告如下

文章插图

文章插图
?总结
从事nginx扩展开发的同学可以关注下这个扩展库 , 它开放了一种多语言模型 , 提供了灵活的扩展方式和nginx高性能模型进行配合 。
项目地址:https://github.com/kingluo/lua-resty-ffi
【使用任意编程语言为nginx扩展高性能逻辑】
推荐阅读
- 详解Java8中的StringJoiner使用
- 灵敏度|你对浮漂真正了解有多少?钓鱼时如何正确选择使用浮漂?
- 怎样使用word邮件合并插入excel数据和照片
- 晚霜可以白天用吗(晚霜怎么用的使用方法)
- 汽车使用涡轮增压,真的能做到既省油,又增强动力吗?
- 使用“燃油宝”别忘看执行标准
- 使用微信和支付宝的朋友,这2个功能一定要关闭,保护资金安全
- 删除在ins上已保存的账号,避免账号过多影响使用!
- 红警2:狗子在大神手中是怎么使用?教你快速使用警犬的技巧!
- iOS15.3.1使用体验:续航发热没惊喜,首批用户评价来了
