uhttpd是openwrt系统默认集成的轻量级服务器,采用select机制对设备性能要求较低。

/usr/sbin/uhttpd -f -h /www -r wifibox -x /cgi-bin -l /slipt -L /usr/share/lua/wifibox/main.lua -t 60 -T 30 -k 20 -A 1 -n 3 -N 100 -R -p 0.0.0.0 80

这是一类智能路由器uhttpd的运行参数,其中—h指定的是网站的根目录,静态文件请求会在会以这个目录为根目录;-L指定了调用的lua主处理程序;-x指定了cgi运行程序;源文件中的运行参数描述如下,附件为utttpd完整源码

"Usage: %s -p [addr:]port [-h docroot]\n""    -f              Do not fork to background\n"" -c file         Configuration file, default is '/etc/httpd.conf'\n""    -p [addr:]port  Bind to specified address and port, multiple allowed\n"
#ifdef HAVE_TLS"   -s [addr:]port  Like -p but provide HTTPS on this port\n""    -C file         ASN.1 server certificate file\n"" -K file         ASN.1 server private key file\n"
#endif"    -h directory    Specify the document root, default is '.'\n""   -E string       Use given virtual URL as 404 error handler\n""    -I string       Use given filename as index page for directories\n""  -S              Do not follow symbolic links outside of the docroot\n""   -D              Do not allow directory listings, send 403 instead\n"" -R              Enable RFC1918 filter\n"
#ifdef HAVE_LUA"   -l string       URL prefix for Lua handler, default is '/lua'\n""   -L file         Lua handler script, omit to disable Lua\n"
#endif
#ifdef HAVE_CGI"   -x string       URL prefix for CGI handler, default is '/cgi-bin'\n""   -i .ext=path    Use interpreter at path for files with the given extension\n"
#endif
#if defined(HAVE_CGI) || defined(HAVE_LUA)"    -t seconds      CGI and Lua script timeout in seconds, default is 60\n"
#endif"    -T seconds      Network timeout in seconds, default is 30\n"" -d string       URL decode given string\n""   -r string       Specify basic auth realm\n""  -m string       MD5 crypt given string\n"

uhttpd服务器接受的请求会根据请求头分成三类,静态文件请求,cgi请求(处理表单信息)和lua请求(功能强大实现多功能的处理和调用)

首先是lua请求,uhttpd服务器是C语言编写,通过c语言调用lua程序实现了,lua请求相关程序的处理,c语言和lua语言通过栈传送数据,下面是一个简单的c语言调用lua程序的实例

//add.c#include        <stdio.h>
#include        "lua.h"
#include        "lualib.h"
#include        "lauxlib.h"/*the lua interpreter*/
lua_State* L;
int
luaadd(int x, int y)
{int sum;
/*the function name*/lua_getglobal(L,"add");
/*the first argument*/lua_pushnumber(L, x);
/*the second argument*/lua_pushnumber(L, y);
/*call the function with 2 arguments, return 1 result.*/lua_call(L, 2, 1);
/*get the result.*/sum = (int)lua_tonumber(L, -1);
/*cleanup the return*/lua_pop(L,1);return sum;
}int
main(int argc, char *argv[])
{int sum;
/*initialize Lua*/L = lua_open();
/*load Lua base libraries*/luaL_openlibs(L);
/*load the script*/luaL_dofile(L, "add.lua");
/*call the add function*/sum = luaadd(10, 15);
/*print the result*/printf("The sum is %d \n",sum);
/*cleanup Lua*/lua_close(L);return 0;
}
add.lua
--add two numbers
function add(x,y)return x + y
end

转载于:https://blog.51cto.com/zifengtayu/1589366

uhttpd 架构调用细节之lua相关推荐

  1. 缓存架构设计细节二三事

    缓存架构设计细节二三事 原创 2016-03-08 58沈剑 架构师之路 本文主要讨论这么几个问题: (1)"缓存与数据库"需求缘起 (2)"淘汰缓存"还是&q ...

  2. 面试官:大型系统架构设计细节你知道多少??

    随着互联网经济的深度发展,传统的服务模式已难以满足商业需求.企业为了适应新的业务规模,不断在部署.管理.功能交付方面更新迭代技术,一时间大量技术各显神通--Zookeeper.Netty.Dubbo. ...

  3. 搜索引擎的原理,架构与细节

    1.全网搜索引擎架构与流程 全网搜索引擎的宏观架构如上图,主要由核心系统和核心数据组成. 核心系统主要分为三部分(粉色部分): spider爬虫系统: search&index建立索引与查询索 ...

  4. 数据中台之OneID (ID-Mapping)架构设计细节全解

    编 辑:诸葛子房 来 源:大数据架构师(ID:bigdata_arch) 彭友们好,我是老彭.之前抽空写了一篇<One ID中的核心技术ID-Mapping究竟是怎么实现的?>结果一大堆人 ...

  5. 搜索系统—搜索引擎的原理,架构与细节

    1.全网搜索引擎架构与流程 全网搜索引擎的宏观架构如上图,核心系统主要分为三部分(粉色部分): spider爬虫系统: search&index建立索引与查询索引系统,这个系统又主要分为两部分 ...

  6. BS架构调用TSC TTP-244 Pro条码打印机的常见问题及解决方案

    一.jsp调用 TSC 打印机 打印中文问题乱码 打印英文正常,中文全部是乱码,(乱码中全是符号,没有汉字)不论怎么设置都没用. 与厂商联系后得到以下信息,TSC动态库中,打印文字存在两种方法 1.A ...

  7. lua学习01:c调用lua、lua调用c、lua的协程、lua的常见API、lua读取配置文件总结

    文章目录 1.c通过虚拟机和虚拟栈调用lua test-vm.c test-vm.lua 打印效果 2.lua通过虚拟机和虚拟栈调用c lua-tbl.c test-tbl.lua 3.lua的协程 ...

  8. java中show方法的调用_Java方法调用细节

    JVM中,类加载过程链接阶段的解析步骤包含将符号引用转换为调用方法的直接引用过程,该过程与方法的绑定机制有关,这节记录下Java方法调用的一些细节. 方法绑定机制 在聊方法绑定机制之前,我们需要先知道 ...

  9. 神经网络整体架构及细节(详细简单)

    前言: 神经网络的来源已经有大部分博主有详细的讲过了,但我发现整体框架中的细节很多博主都是大体讲了讲,所以作者今天想来好好详细的讲讲框架中的细节. 一:神经网络构架大体介绍 如下图所示: 这张图很生动 ...

最新文章

  1. Pytorch实现MNIST(附SGD、Adam、AdaBound不同优化器下的训练比较) adabound实现
  2. 21个让React 开发更高效更有趣的工具
  3. python 自学需要多久-怎么自学python,大概要多久?
  4. ubuntu中clion更换cmake版本以及文本背景颜色
  5. oracle 次月,Oracle日期查询:季度、月份、星期等时间信息
  6. linux自动应答,08. 创建 ks.cfg自动应答文件
  7. centos升级之共享文件夹
  8. vue-cli目录结构解析
  9. 浅谈过程和结果的关系
  10. php 给图片加水印
  11. EndpointAddress——不只是一个Uri[上篇]
  12. 快解析 : 管家婆A8远程访问解决方案
  13. 电脑ATX电源接口定义详解
  14. 无法启动此程序 因为计算机中丢失msvcr71.dll,msvcr71.dll丢失怎样修复?计算机中丢失msvcr71.dll的解决方法...
  15. mysql like模糊查询like %someTitle%效率低下
  16. C语言阶梯电费函数,用阶梯电价计算逻辑学习销售人员阶梯提成计算函数
  17. mysql 缺省date值_关于MySQL中date类型缺省值
  18. 因为文件目录存在空格导致kafka运行错误:提示找不到或者无法加载主类错误
  19. Python类与对象最全总结大全(类、实例、属性方法、继承、派生、多态、内建函数)
  20. x requested with php,PHP / Ajax“Vary:X-Requested-With”对我不起作用!

热门文章

  1. mysql 数据库引擎切花_asyncio异步编程【含视频教程】
  2. 禁用计算机服务LanmanServer,计算机关闭默认共享C$D$E$F$ADMIN$IPC$的方法
  3. 全局变量中断原子操作_原子操作原理分析
  4. 第十七届全国大学生智能车竞赛开始啦
  5. 拆解一个舵机组成的机器人
  6. html div全屏遮罩层,Jquery全屏遮罩层DIV的实现代码
  7. qstudio c语言中文网,再整理:Visual Studio Code(vscode)下的通用C语言环境搭建
  8. java青蛙青蛙跳井_公务员行测技巧:青蛙跳井问题
  9. 深度linux12,Linux Deepin 12.06 试用体验
  10. php绘图技术加水印,PHP图片添加水印功能示例小结