hi-nginx是是基于nginx最新版开发的多语言通用服务器,它不仅继承了nginx的全部功能,100%兼容nginx,而且支持多种语言直接开发web应用。不仅性能强劲,而且易于开发,部署方便。目前,hi-nginx直接支持使用c++和python进行web应用开发,而无需其他后端应用服务器。hi-nginx本身就合并了后端服务器的功能。
hi-nginx还提供两个基于tengine和openresty的分支版本。因此,hi-nginx实际上还支持直接使用lua语言进行web开发。
此次发布的是hi-nginx-1.0.2。主要更新如下:
更新nginx至最新版1.13.1
添加基于redis和hiredis的session会话机制
添加基于boost.python的python语言支持
c++例子:
#include "servlet.hpp" namespace hi{ class hello : public servlet { public: void handler(request& req, response& res) { res.headers.find("Content-Type")->second = "text/plain;charset=UTF-8"; res.content = "hello,world"; res.status = 200; } }; } extern "C" hi::servlet* create() { return new hi::hello(); } extern "C" void destroy(hi::servlet* p) { delete p; }
python例子:
location = /pyecho { hi_python_content "hi_res.status(200)\nhi_res.content('hello,world')" ; }
location ~ \.py$ { hi_python_script python; }
更多使用说明请移步:
引用来自“八风不动”的评论
python访问mysql的时候,该用pymysql驱动,还是aiomysql?引用来自“无名码农”的评论
好像涉及到Socket的都不是非阻塞的吗?引用来自“webcpp”的评论
安装了解下吧引用来自“无名码农”的评论
if (conf->need_session == 1 && ngx_request.cookies.find(SESSION_ID_NAME) != ngx_request.cookies.end()) {if (!REDIS) {
REDIS = std::make_shared<hi::redis>();
}
if (REDIS && !REDIS->is_connected() && conf->redis_host.len > 0 && conf->redis_port > 0) {
REDIS->connect((char*) conf->redis_host.data, (int) conf->redis_port);
}
if (REDIS && REDIS->is_connected()) {
SESSION_ID_VALUE = ngx_request.cookies[SESSION_ID_NAME ];
if (!REDIS->exists(SESSION_ID_VALUE)) {
REDIS->hset(SESSION_ID_VALUE, SESSION_ID_NAME, SESSION_ID_VALUE);
REDIS->expire(SESSION_ID_VALUE, conf->session_expires);
ngx_request.session[SESSION_ID_VALUE] = SESSION_ID_VALUE;
} else {
REDIS->hgetall(SESSION_ID_VALUE, ngx_request.session);
}
#ifdef USE_HIREDIS
if (view_instance) {
view_instance->REDIS = REDIS;
}
#endif
引用来自“无名码农”的评论
好像涉及到Socket的都不是非阻塞的吗?引用来自“webcpp”的评论
安装了解下吧if (!REDIS) {
REDIS = std::make_shared<hi::redis>();
}
if (REDIS && !REDIS->is_connected() && conf->redis_host.len > 0 && conf->redis_port > 0) {
REDIS->connect((char*) conf->redis_host.data, (int) conf->redis_port);
}
if (REDIS && REDIS->is_connected()) {
SESSION_ID_VALUE = ngx_request.cookies[SESSION_ID_NAME ];
if (!REDIS->exists(SESSION_ID_VALUE)) {
REDIS->hset(SESSION_ID_VALUE, SESSION_ID_NAME, SESSION_ID_VALUE);
REDIS->expire(SESSION_ID_VALUE, conf->session_expires);
ngx_request.session[SESSION_ID_VALUE] = SESSION_ID_VALUE;
} else {
REDIS->hgetall(SESSION_ID_VALUE, ngx_request.session);
}
#ifdef USE_HIREDIS
if (view_instance) {
view_instance->REDIS = REDIS;
}
#endif
引用来自“kerneler”的评论
为什么不直接用go语言呢引用来自“chenyuner”的评论
感觉还不如直接用 ng-lua引用来自“无名码农”的评论
好像涉及到Socket的都不是非阻塞的吗?引用来自“mickelfeng”的评论
😆,python效率没lua高。引用来自“游客”的评论
hi-nginx下python的性能跟lua差距有多大?引用来自“vaptu”的评论
还没细看代码,脑海中第一个问题就是。cpp或py程序的生命周期是怎样的呢?线程呢?