ngx_tcc_module是一个nginx http模块,它把tcc编译器内嵌到nginx,用来编译C语言编写的网页后台脚本。
每个页面由两个文件组成:
*.csp,是主要用HTML编写的文件,里面会内嵌一些C代码。
*.c,纯C编写的代码文件,里面主要是做一些业务逻辑的处理。
下载:
https://github.com/downloads/hehaiqiang/ngwsx/ngx_tcc_module-20110720.rar
代码示例:
index.csp
<%
/* This is a "c server page (CSP)" */
static int i;
%>
<html>
<head>
</head>
<body>
<% for (i = 0; i < 5; i++) { %>
<a href="<%=url%>" target="_blank"><%=title%></a>
<% } %>
</body>
</html>
index.c
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
#define NGX_DBD_OPT_NON_BLOCKING 0x01
static void row_handler(ngx_http_request_t *r);
static void *dbd;
static u_char *url = "";
static u_char *title = "";
static void
finalize(ngx_http_request_t *r, ngx_int_t rc)
{
ngx_tcc_dbd_close(dbd);
ngx_tcc_dbd_destroy(dbd);
ngx_tcc_finalize(r, rc);
}
static void
field_handler(ngx_http_request_t *r)
{
off_t offset;
size_t size, total;
u_char *value;
ngx_int_t rc;
for ( ;; ) {
rc = ngx_tcc_dbd_field_read(dbd, &value, &offset, &size, &total);
if (rc == NGX_AGAIN) {
return;
}
if (rc == NGX_ERROR) {
finalize(r, rc);
return;
}
if (rc == NGX_DONE) {
break;
}
/* TODO: value, offset, size, total */
ngx_tcc_output(r, value, size);
ngx_tcc_output_str(r, " ");
}
ngx_tcc_output_str(r, "<br/>");
ngx_tcc_dbd_set_handler(dbd, row_handler, r);
row_handler(r);
}
static void
row_handler(ngx_http_request_t *r)
{
ngx_int_t rc;
for ( ;; ) {
rc = ngx_tcc_dbd_row_read(dbd);
if (rc == NGX_AGAIN) {
return;
}
if (rc == NGX_ERROR) {
finalize(r, rc);
return;
}
if (rc == NGX_DONE) {
break;
}
ngx_tcc_dbd_set_handler(dbd, field_handler, r);
field_handler(r);
return;
}
url = "http://www.126.com/";
title = "126.com";
finalize(r, NGX_OK);
}
static void
column_handler(ngx_http_request_t *r)
{
size_t size;
u_char *buf;
ngx_int_t rc;
for ( ;; ) {
rc = ngx_tcc_dbd_column_read(dbd);
if (rc == NGX_AGAIN) {
return;
}
if (rc == NGX_ERROR) {
finalize(r, rc);
return;
}
if (rc == NGX_DONE) {
break;
}
buf = (u_char *) ngx_tcc_dbd_column_name(dbd);
size = ngx_strlen(buf);
ngx_tcc_output(r, buf, size);
ngx_tcc_output_str(r, " ");
}
ngx_tcc_output_str(r, "<br/>");
ngx_tcc_dbd_set_handler(dbd, row_handler, r);
row_handler(r);
}
static void
result_handler(ngx_http_request_t *r)
{
ngx_int_t rc;
rc = ngx_tcc_dbd_query(dbd);
if (rc == NGX_AGAIN) {
return;
}
if (rc == NGX_ERROR) {
finalize(r, rc);
return;
}
ngx_tcc_dbd_set_handler(dbd, column_handler, r);
column_handler(r);
}
static void
connect_handler(ngx_http_request_t *r)
{
ngx_int_t rc;
rc = ngx_tcc_dbd_connect(dbd);
if (rc == NGX_AGAIN) {
return;
}
if (rc == NGX_ERROR) {
ngx_tcc_dbd_destroy(dbd);
ngx_tcc_finalize(r);
return;
}
/* TODO: escape sql */
ngx_tcc_dbd_set_sql(dbd, "show databases", sizeof("show databases") - 1);
ngx_tcc_dbd_set_handler(dbd, result_handler, r);
result_handler(r);
}
__declspec(dllexport) void
handler(ngx_http_request_t *r)
{
ngx_int_t rc;
dbd = (void *) ngx_tcc_dbd_create(r, "libdrizzle");
ngx_tcc_dbd_set_options(dbd, NGX_DBD_OPT_NON_BLOCKING);
ngx_tcc_dbd_set_tcp(dbd, "127.0.0.1", 3306);
ngx_tcc_dbd_set_db(dbd, "mysql");
ngx_tcc_dbd_set_auth(dbd, "root", "123456");
ngx_tcc_dbd_set_handler(dbd, connect_handler, r);
connect_handler(r);
}
分享到:
相关推荐
用于nginx的http正向代理https使用的模块
nginx lua module for windows 详细请访问 http://blog.csdn.net/ngwsx/
ngx_devel_kit-0.3.0
Nginx:一致性哈希(第三方模块ngx_http_consistent_hash):ngx_http_consistent_hash-master.zip
下载后,在编译安装nginx时,用--add-module选项,指到sticky所在目录。类似命令如下: ./configure --prefix=/usr/local/nginx-1.6.0 --add-module=../nginx-sticky-module-1.25 --without-http_ssi_module --...
ngx_http_dav_ext_module.so centos7 nginx 1.18 可以作为模块加载
备用nginx代理模块
ngx-coolkit-module echo-nginx-module form-input-nginx-module encrypted-session-nginx-module set-misc-nginx-module ngx-postgres-module ngx-lua-module ngx_lua_upstream headers-more-nginx-module rds-json...
nginx1.20.2
增加了ngx_http_proxy_connect_module模块的,已经编译好的windows exe文件。 可以正向代理https请求。来源地址:https://github.com/dyq94310/nginx-build-msys2/releases 使用方法,放到从官网下的nginx windows...
ngx_image_thumb-master,提供处理图片缩略的zip包。
带宽使用和iowait会很高。ngx_http_subrange_module就是为了解决这个问题,它能分割HTTP requests。将大数据量的HTTP请求切分为多个子请求,当下载一个1 G的文件,subrange将从后端主机中下载文件块,比如先获取5 M,...
二. ngx_http_limit_conn_module指令解释limit_conn_zone语法: limit_conn_zone $variable zo
nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问。
nginx安装缩略图必备的一个源码包,nginx的插件。
ngx_http_proxy_connect_module, 用于CONNECT请求处理的前向代理模块 名称 此模块为"连接"http方法提供支持,此方法主要用于通过代理服务器进行隧道SSL请求 。 目录 姓名 例子 安装 指令 proxy_connect proxy_...
# yum -y install -y pcre* openssl* # for pcre, such as ngx.gmatch etc, --with-pcre=PATH/pcre-8.36 --with-pcre-jit # if use openssl, then need --with-... --add-module=src/tcp/ngx_tcp_lua_module
ngx_healthcheck_module:用于上游服务器运行状况检查的nginx模块。 支持流和http上游。该模块可以为Nginx提供主动式嵌入式服务器健康检查的功能(同时支持四层和七层嵌入式服务器的健康检测)
ngx_cache_purge-2.1.tar.gz 不必多介绍吧,