热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Apache上使用lua(lwt)

Lua作为一门领域语言确实很有特色,利用openresty项目我们可以方便地用lua脚本控制nginx服务器的行为,我不禁想看看在apache服务器中是否也有类似的项目,然后就发现了下面这个mod_lwt模块,那么来试试吧。首先下载mod_lwt项目的安装包,安装之前需要保证
Lua作为一门领域语言确实很有特色,利用openresty项目我们可以方便地用lua脚本控制nginx服务器的行为,我不禁想看看在apache服务器中是否也有类似的项目,然后就发现了下面这个mod_lwt模块,那么来试试吧。
首先下载mod_lwt项目的安装包,安装之前需要保证系统环境中已经安装了apache,lua以及liblua,后者可以在lua官网上下载liblua.so文件,这里使用的是5.1版本(其实只需要去掉lua.c文件编译也可得到liblua.so,为了省事我就直接下载别人编译好的了)。
安装mod_lwt,命令如下
cd mod_lwt
make
make install
安装过程会在/usr/local/share/lua/5.1/这个目录下生成httpd.lua以及httpd/wsapi.lua两个文件
修改apache配置文件,在相应位置添加如下内容 AddHandler lwt .lua
AddHandler lwt-wsapi .ws
LoadModule lwt_module                     /usr/lib64/apache2/mod_lwt.so
然后调用如下命令启动模块,重启服务器 a2enmod lwt
apache2ctl restart
安装模块就已经完成了,接下来我们用官网的测试脚本test.lua试试,放在网站根目录
require "httpd"
local request_fields = { "uri", "protocol", "hostname", "path", "path_info", "args",
                "method", "filename", "filedir", "user", "auth_type",
                "local_ip", "remote_ip" }
request, args = ...
httpd.set_content_type("text/plain; charset=utf8")
httpd.write("Hello Lua World\r\n")
for _, key in ipairs(request_fields) do
        httpd.write(key .." -> " .. (request[key] or "(not set)") .. "\r\n")
end
然后就可以用浏览器访问test.lua脚本,可以看到如下效果,是不是很类似php脚本动态生成网页啊,呵呵



可见用lua已经可以方便地操作apache服务器的行为,获取数据,产生输出。项目主页上提供了一些基本的http的api供开发者使用
httpd.pairs (apr_table)
httpd.set_status (status)
httpd.set_content_type (content_type)
httpd.add_header (name, value [, err_header])
httpd.add_COOKIE (name [, value [, expires [, path [, domain [, secure [, httponly]]]]]])
httpd.write_template (filename [, flags [, file]])
httpd.escape_uri (string)
httpd.escape_xml (string)
httpd.escape_js (string)
httpd.input
httpd.output
httpd.read (...)
httpd.write (...)
httpd.debug (message)
httpd.notice (message)
httpd.err (message)
httpd.redirect (request, uri, status)
httpd.dump (value)
httpd.match (path_info, ...)
下面还是创建个脚本感受一下Hello World的效果。
require "httpd" -- Import the httpd module
request, args = ... -- Get the request and args values passed to the script
name = args.name or "Unknown" -- Process arguments
httpd.set_content_type("text/plain") -- Set content type
httpd.write("Hello, " .. name .. "!\r\n")
httpd.write("Welcome to " .. request.hostname .. "!\r\n")
用浏览器访问脚本hello.lua?name=ciaos,会输出如下结果 Hello, ciaos!
Welcome to 10.6.2.245!
LWT将业务逻辑独立到lua脚本中来,我们就可以使用lua来实现自己的需求了,同时LWT提供可选的Lua模块用来访问数据库和缓存,真是不错的语言啊。(网上有人测试LWT比python脚本的性能提升120%左右,未查实)

功能特性(官方说明):

Apache module. LWT provides an Apache HTTP server module that handles requests by invoking Lua scripts. The module provides the core functionality for creating web applications.
Template engine. LWT provides a template engine that blends Lua with HTML/XML. The engine supports substitutions and logic in a way that is natural to both Lua and HTML/XML. This makes it easy to develop web applications with a clean separation of UI logic in Lua and layout in HTML.
Full request control. LWT provides full control over web requests, including request status, content type, input and output. This faciliates the creation of JSON web services, and other uses of HTTP.
File uploads. LWT supports HTTP file uploads from a web browser.
WSAPI. LWT supports the WSAPI standard, and can be used to run WSAPI applications directly in the Apache HTTP server.
Databases. The IS module supports the access to information system in an SQL injection safe way. Currently, the module supports MySQL, Sybase, SQL Server and SQLite.
Caching. The cache module supports the use of caches, currently memcached.
除了LWT以外,还有一个模块mod_plua也是将lua作为脚本嵌入到html代码中,大家可以自行试试。

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
author-avatar
厉害了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有