c and lua web framework
httpevent是webcppd的继承者。
由于webcppd内核采用的是Poco内置的多线程服务器,虽然性能不错,但是依然存在不小的提升空间。
httpevent不仅包含webcppd的全部特性,而且改进和增加了新的功能
httpevent主要在以下三个方面了改进了webcppd:
- 内核采用libevent2,性能倍增,稳定性更好,对信号处理更友好
- handler采用基于libevent2的轻包装类,不再受限于Poco。
- 不仅轻松支持C 开发,而且轻松支持lua开发
- HTTP 1.1
- HTTPS
- 支持多种服务器类型选择,可通过配置文件轻松配置
- 0=static
- 1=0 dynamic
- 2=1 session
- 3=1 cache
- 4=3 session
- 5=all
- default=5
- c 开发
- lua 开发(支持lua v5.1,v5.2,v5.3以及luajit)
- 会话管理
- 自动缓存管理
- ip动、静态黑名单
- 正则路由(PCRE)
- 防盗链
- 日志
使用方法参见plugin/lua
-
httpevent.response : lua 对象实例
- send_head
- send_body
-
httpevent.request : lua 对象实例
- get_client
- get_method
- get_uri
- get_user_agent
-
httpevent.ROUTE : 一个 lua 表
-
httpevent.CONFIG : 一个 lua 表
-
httpevent.form_tool : lua 对象实例 包含GET,POST,可上传域为upload的文件
- has
- get
-
httpevent.cookie_tool : lua 对象实例
- has
- set
- get
-
httpevent.session_tool : lua 对象实例
- has
- set
- get
-
httpevent.util_tool : lua 对象实例
- error
- submit
- redirect
#include <httpevent.hpp>
namespace httpevent {
class hello : public view {
void handler(const request& req, response& res) {
res.send_head("Content-Type", "text/plain;charset=UTF-8")
.send_body("hello,world");
}
};
}
local hello={}
function hello.main()
httpevent.response:send_head("Content-Type", "text/plain;charset=UTF-8")
:send_body('hello,world')
end
return hello
- 做纯静态文件服务器,推荐0型
- 作后端应用服务器,推荐1、2、3、4型,视乎业务需要选择是否需要缓存管理器或(和)会话管理器
- 作通用服务器,推荐选择默认的5型
httpevent提供系统级的缓存服务,对于3、4、5型服务器,只要没有调用submit方法,系统都将自动缓存内容。 一旦调用submit方法,系统就会认为该内容无需缓存。
以下数据以3型服务器为基准,压力测试工具为ab(ubuntu 16.10,i5-5200U,4G,笔记本)
-
c hello world
ab -c500 -n 50000 http://localhost/ Requests per second: 24538.13 [#/sec] (mean)
-
lua hello world
ab -c500 -n 50000 http://localhost/demo/hello.lua Requests per second: 20470.11 [#/sec] (mean)
- libevent v2.1.8
- Poco framework v1.6
- lua devel v5.1
- openssl devel
build.sh
/etc/httpevent/httpevent.properties
sudo systemctl enable httpevent
sudo systemctl (start|stop|restart|status) httpevent
- C/C 可能比lua更适合需要密集计算的业务
- 尽量使用通用性较强的路由规则,缩短路由表的长度
- 绝不要require包含lua api的模块,用dofile替代
若httpevent对你有所帮助,欢迎你对该项目提供一些捐赠