hi-ngin 一个用于C++,Python和Lua的快速而强大的Web服务器和应用程序服务器

网友投稿 790 2022-11-04

hi-ngin 一个用于C++,Python和Lua的快速而强大的Web服务器和应用程序服务器

hi-ngin 一个用于C++,Python和Lua的快速而强大的Web服务器和应用程序服务器

Features

All features of nginx(latest release) are inherited, i.e., it is 100% compatible with nginx.Web development using python, c++, lua, php7, java , javascript and jsr-223 JVM language

Dependency

linuxgcc and g++(c++11) or clang and clang++python-devel,if --enable-http-hi-python=YES and with-http-hi-python-version=python2python3.x-devel if --enable-http-hi-python=YES and with-http-hi-python-version=python3lua-devel(lua5.x),if --enable-http-hi-lua=YES and --with-http-hi-lua-version=lua5.xluajit-devel,if --enable-http-hi-lua=YES and --with-http-hi-lua-version=luajitjdk 1.8,9,10,11,12,if --enable-http-hi-java=YESPHP 7.0,7.1, 7.2,7.3(--enable-embed=shared),if --enable-http-hi-php=YES

Installation

./configure --help or see install_demo.sh or

--enable-http-hi-cpp=YES \ --enable-http-hi-python=NO \ --enable-http-hi-lua=NO \ --enable-http-hi-qjs=NO \ --enable-http-hi-java=NO \ --enable-http-hi-php=NO \ --with-http-hi-python-version=python3 \ --with-http-hi-lua-version=lua5.3 \ --add-module=module/ngx_http_hi_module \ --add-module=module/ngx_autoblacklist_module

python, lua api

hi_req

urimethodclientparamuser_agenthas_headerget_headerhas_formget_formhas_sessionget_sessionhas_cookieget_cookiehas_cacheget_cache

hi_res

statuscontentheadersessioncache

quickjs api

hi

urimethodclientparamuser_agenthas_headerget_headerhas_formget_formhas_sessionget_sessionhas_cookieget_cookiehas_cacheget_cachestatuscontentheadersessioncache

hello,world

cpp servlet class

#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;}

cpp compile

g++ -std=c++11 -I/usr/local/nginx/include -shared -fPIC hello.cpp -o hello.soinstall hello.so /usr/local/nginx/cpp

java servlet class

package hi;public class jhello implements hi.servlet { public jhello() { } public void handler(hi.request req, hi.response res) { res.status = 200; res.content = "hello,world"; }}

java compile

${JAVA_HOME}/bin/javac -classpath .:${NGINX_INSTALL_DIR}/java/hi-nginx-java.jar hi/jhello.java

php servlet class

see php/hi/request.php,php/hi/response.php and php/hi/servlet.php

add('{^/$}', array('GET'), function ($rq, $rs, &$param) { $rs->content = 'hello,world'; $rs->status = 200; }); $app->add('{^/who/(?P\w+)/?$}', array('GET'), function ($rq, $rs, &$param) { $rs->content = 'hello,'.$param['name']; $rs->status = 200; }); $app->run($req, $res); }}

javascript hello world

if (typeof (Mustache) == 'undefined') { load('https://cdn.bootcss.com/mustache.js/2.3.0/mustache.min.js')}var list = java.util.Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);var template = "{{#list}}* {{.}}\n{{/list}}"var key = 'test', outputif (hi_req.cache.containsKey(key)) { output = hi_req.cache.get(key)} else { output = Mustache.render(template, {'list': JSON.parse(list.toString())}) hi_res.cache.put(key, output)}hi_res.headers.get('Content-Type').set(0, 'text/plain;charset=UTF-8')hi_res.content = outputhi_res.status = 200;

quickjs

import * as hi from "hi";hi.header('Content-Type','text/plain;charset=UTF-8')hi.content('hello,world')hi.status(200)

3rd party module

nginx-rtmp-modulenchan

ngx_http_hi_module directives

directives : content: loc,if in lochi,default: "" example:

location = /hello { hi cpp/hello.so ; }

directives : content: http,srv,loc,if in loc ,if in srvhi_need_tokens,default: on example:

hi_need_tokens on|off;

directives : content: http,srv,loc,if in loc ,if in srvhi_cache_method,default: GET example:

hi_cache_method GET|POST|PUT|HEAD;

directives : content: http,srv,loc,if in loc ,if in srvhi_need_cache,default: on example:

hi_need_cache on|off;

directives : content: http,srv,loc,if in loc ,if in srvhi_cache_size,default: 10 example:

hi_cache_size 10;

directives : content: http,srv,loc,if in loc ,if in srvhi_cache_expires,default: 300s example:

hi_cache_expires 300s;

directives : content: http,srv,loc,if in loc ,if in srvhi_need_kvdb,default: off example:

hi_need_kvdb on|off;

directives : content: http,srv,loc,if in loc ,if in srvhi_kvdb_size,default: 10 example:

hi_kvdb_size 10;

directives : content: http,srv,loc,if in loc ,if in srvhi_kvdb_expires,default: 300s example:

hi_kvdb_expires 300s;

directives : content: http,srv,loc,if in loc ,if in srv hi_need_headers,default: off example:

hi_need_headers on|off;

directives : content: http,srv,loc,if in loc ,if in srv hi_need_cookies,default: off example:

hi_need_cookies on|off;

directives : content: http,srv,loc,if in loc ,if in srv hi_need_session,default: off example:

hi_need_session on|off;

directives : content: http,srv,loc,if in loc ,if in srvhi_session_expires,default: 300s example:

hi_session_expires 300s;

directives : content: loc,if in lochi_python_content,default: "" example:

location = /pyecho { hi_python_content "hi_res.status(200)\nhi_res.content('hello,world')" ; }

directives : content: loc,if in lochi_python_script,default: "" example:

location ~ \.py$ { hi_python_script python; }

or

location / { hi_python_script python/index.py; }

directives : content: http,srv,if in srvhi_lua_package_path,default: "" example:

hi_lua_package_path '/usr/local/nginx/lua/?.lua;';

directives : content: http,srv,if in srvhi_lua_package_cpath,default: "" example:

hi_lua_package_cpath '/usr/local/nginx/lua/?.so;';

directives : content: loc,if in lochi_lua_content,default: "" example:

location = /luaecho { hi_lua_content "hi_res:status(200)\nhi_res:content('hello,world')" ; }

directives : content: loc,if in lochi_lua_script,default: "" example:

location ~ \.lua$ { hi_lua_script lua; }

or

location / { hi_lua_script lua/index.lua; }

directives : content: http,srv,if in srvhi_java_classpath,default:"-Djava.class.path=." example:

hi_java_classpath "-Djava.class.path=.:/usr/local/nginx/java:/usr/local/nginx/java/hi-nginx-java.jar";

directives : content: http,srv,if in srvhi_java_options,default:"-server -d64 -Xmx1G -Xms1G -Xmn256m" example:

hi_java_options "-server -d64 -Xmx3G -Xms3G -Xmn768m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseNUMA -XX:+CMSParallelRemarkEnabled -XX:MaxTenuringThreshold=15 -XX:MaxGCPauseMillis=30 -XX:GCPauseIntervalMillis=150 -XX:+UseAdaptiveGCBoundary -XX:-UseGCOverheadLimit -XX:+UseBiasedLocking -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=15 -Dfml.ignorePatchDiscrepancies=true -Dfml.ignoreInvalidMinecraftCertificates=true -XX:+UseFastAccessorMethods -XX:+UseCompressedOops -XX:+OptimizeStringConcat -XX:+AggressiveOpts -XX:ReservedCodeCacheSize=2048m -XX:+UseCodeCacheFlushing -XX:SoftRefLRUPolicyMSPerMB=10000 -XX:ParallelGCThreads=10";

directives : content: loc,if in lochi_java_servlet,default:"" example:

hi_java_servlet hi/jhello;

directives : content : http,srv,loc,if in loc ,if in srvhi_java_servlet_cache_expires,default:300s example:

hi_java_servlet_cache_expires 300s;

directives : content : http,srv,loc,if in loc ,if in srvhi_java_servlet_cache_size,default:10 example:

hi_java_servlet_cache_size 10;

directives : content: http,srv,if in srvhi_java_version,default:8 example:

hi_java_version 8;

directives : content: loc,if in lochi_javascript_lang,default:javascript example:

hi_javascript_lang javascript;

directives : content: loc,if in lochi_javascript_extension,default:js example:

hi_javascript_extension js;

directives : content: loc,if in lochi_javascript_content,default:"" example:

hi_javascript_content "hi_res.content='hello,world';hi_res.status=200;";

directives : content: loc,if in lochi_javascript_script,default:"" example:

hi_javascript_script javascript/index.js;

or

hi_javascript_script javascript;

directives : content: http,srv,loc,if in loc ,if in srvhi_javascript_compiledscript_expires,default:300s example:

hi_javascript_compiledscript_expires 300s;

directives : content: loc,if in lochi_php_script,default: "" example:

location ~ \.php$ { hi_php_script php; }

or

location / { hi_php_script php/index.php; }

directives : content: loc,if in lochi_qjs_script,default: "" example:

location ~ \.js$ { hi_qjs_script qjs; }

or

location / { hi_qjs_script qjs/index.js; }

directives : content: http,srv,if in srvhi_qjs_memory_limit ,default: 1024m example:

hi_qjs_memory_limit 1024m;

directives : content: http,srv,if in srvhi_qjs_ctx_called_limit,default: 10240 example:

hi_qjs_ctx_called_limit 10240;

directives : content: loc if in lochi_subrequest, default : "" example:

location ^~ /sub { hi_subrequest '/query'; hi_lua_content 'hi_res:header("Content-Type",hi_req:get_form("__subrequest_content_type__"))\nhi_res:status(tonumber(hi_req:get_form("__subrequest_status__")))\nhi_res:content(hi_req:get_form("__subrequest_body__"))'; } location ^~ /query { internal; proxy_pass http://http://hq.sinajs-/; proxy_set_header Accept-Encoding ''; }# curl -i http://localhost/sub?list=sh601006

ngx_http_autoblacklist_module directives

directives : content: http,srv,loc,if in loc ,if in srvautoblacklist, default : "off"autoblacklist_size, default : 1024autoblacklist_limit, default : 30autoblacklist_expires, default : 86400s example:

autoblacklist on|off; autoblacklist_size 1024; autoblacklist_expires 86400s; autoblacklist_limit 30;

nginx.conf

hi_demo_conf

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot项目部署到腾讯云的实现步骤
下一篇:FS8P153B 单键轻触开关LED闪灯IC换段芯片
相关文章

 发表评论

暂时没有评论,来抢沙发吧~