因为空闲时间比较多,所以在CPAN上乱翻,看到了nginx_perl这个项目(原名Nginx::Engine),现在托管在github.com上。地址见:https://github.com/zzzcpan/nginx-perl
这个模块的目的,是在nginx内置官方perl模块的基础上,实现一系列异步非阻塞的api。用connector/writer/reader完成类似proxy的功能(这里因为是交给perl完成,所以不单单局限在http上了),用take_connection/give_connection完成类似websocket的功能,用ssl_handshaker完成ssl的解析,用timer完成定时器,用resolver完成域名解析…使用方法简单来说,就是用main_count_inc/finalize_request控制计数器,用NGX_READ/NGX_WRITE/NGX_CLOSE等控制callback。
其他内容和apache的mod_perl,或者nginx.org的perl类似。最新版的POD地址见:http://zzzcpan.github.com/nginx-perl/Nginx.html
最后举例一个自己写的简单的例子:
package HelloWorld;
use Nginx;
use strict;
#用来在nginx启动的时候做的事情,这里单纯显示一下
sub init_worker {
warn 'nginx_perl start [OK]';
};
#这里是nginx的http模块中调用的handler,alexander有计划改成tcp级别的
sub handler {
my $r = shift;
#增加主循环的计数器
$r->main_count_inc;
#使用非阻塞的连接器连接127.0.0.1的80端口,10秒超时
ngx_connector '127.0.0.1', 80, 10, sub {
#如果连接出问题,会记录在$!中
if ($!) {
$r->send_http_header('text/html');
$r->print("Connection failed, $!\n");
$r->send_special(NGX_HTTP_LAST);
#不管怎么处理这次连接,最后一定要记得用$r->finalize_request(),会decrease之前$r->main_count_inc;里加上的计数。
$r->finalize_request(NGX_OK);
return NGX_CLOSE;
};
#返回$c是建立的连接
my $c = shift;
my $req_buf = "GET /index.php HTTP/1.0\x0d\x0a".
"Host: chenlinux.com\x0d\x0a".
"Connection: close\x0d\x0a".
"\x0d\x0a";
#这里记住定义buffer的时候不要搞成undef了,会报段错误的,不过俄国佬回信说他修复了
my $res_buf = '';
#非阻塞写入,超时10秒
ngx_writer $c, $req_buf, 10, sub {
if ($!) {
......
};
$req_buf = '';
#之前的buffer测试就是这里,如果加一个warn,就不会报错……汗
#warn "$req_buf\n$res_buf\n";
#写入完成后,开始调用读取
return NGX_READ;
};
#读取到buffer,最短0字节,最长8000字节,超时10秒
ngx_reader $c, $res_buf, 0, 8000, 10, sub {
if ($!) {
......
}
$r->send_http_header('text/html');
$r->print($res_buf);
$r->send_special(NGX_HTTP_LAST);
$r->finalize_request(NGX_OK);
return NGX_CLOSE;
};
#这个是connector的语句,表示连接成功后调用写入
return NGX_WRITE;
};
#各个非阻塞调用完成后的返回,NGX_DONE只能用在http的handler里,不能在ngx_*r里用,里面请用NGX_CLOSE。
return NGX_DONE;
};
1;
另:源码中带有一个真正的反向http的例子Nginx::Util和一个Redis的例子。并且与nodejs读取redis的性能做了对比。可以参见~~
相关推荐
Nginx_mod_h264_streaming是Nginx的一个扩展模块,专为支持H.264编码的流媒体内容设计。该模块允许Nginx直接处理H.264编码的视频流,提供HTTP Live Streaming (HLS)或MPEG-DASH服务,这两种协议广泛应用于移动端和...
patch -p0 < ../nginx_upstream_check_module-master/check_1.9.2+.patch ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module --with-http_stub_status_module --with-pcre \ --with-...
nginx_tcp_proxy_module-master.zip
但是,原始的`upstream`模块并不具备健康检查功能,这就是`nginx_upstream_check_module`的用武之地。 ### Nginx Upstream Check Module特性 1. **健康检查**:该模块可以定期向后端服务器发送探测请求,如...
《深入解析nginx_upstream_hash模块:打造高效负载均衡策略》 在互联网服务中,nginx作为一款高性能的HTTP和反向代理服务器,广泛应用于各种复杂的网络架构中。为了满足动态负载均衡的需求,nginx提供了丰富的...
**Nginx基础配置与参数说明** Nginx是一款高性能的HTTP和反向代理服务器,以其轻量级、高并发处理能力以及优秀的稳定性而被广泛应用于互联网服务中。本文将详细解析`nginx.config`文件中的核心配置选项和参数,帮助...
1. **下载源码**:获取`nginx_http_push_module`的最新版本,例如`nginx_http_push_module-0.692`。 2. **编译Nginx**:将模块源码添加到Nginx的配置文件中,然后重新编译Nginx,确保模块被正确集成。 3. **配置...
官方nginx 镜像不带主动健康,本镜像将 nginx_upstream_check健康检查 打包到了镜像中。
1. **获取源码**:首先,你需要从项目仓库下载`nginx_tcp_proxy_module`的源代码,如本例中的`nginx_tcp_proxy_module-master`压缩包。 2. **编译Nginx**:在编译Nginx时,将模块源码添加到配置中。这通常涉及以下...
在标题和描述中提到的"Nginx_upstream_hash-0.3.1.tar.gz"是一个Nginx的第三方模块,它扩展了upstream模块的功能,引入了基于URL哈希的分发策略。这个模块的版本为0.3.1,表明它是该功能的一个特定实现。 这个模块...
nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问。
**Nginx_mod_h264_streaming-2.2.7 模块详解** `nginx_mod_h264_streaming-2.2.7` 是一个针对 Nginx 的扩展模块,它专为实现高效的 H264 视频流媒体服务而设计。H264,全称为 High Efficiency Video Coding(高效...
安装 `nginx_upload_module` 需要先解压 `nginx_upload_module-2.2.0.tar.gz` 文件,然后在 Nginx 的源码构建过程中添加该模块。这通常涉及以下步骤: - 下载并解压 Nginx 源码。 - 将解压后的 `nginx_upload_module...
`nginx_upstream_check_module-master` 是一个由淘宝技术团队开发的Nginx扩展模块,主要用于健康检查和负载均衡器中的服务器状态监控。这个模块对于运行大规模分布式系统,尤其是那些依赖Nginx作为反向代理和负载...
在这个名为 "nginx_1.7.11.3_Gryphon.zip" 的压缩包中,我们聚焦于 Nginx 的一个特定版本——1.7.11.3,它被特别优化用于媒体直播服务器。与 FFmpeg 集成后,这一版本的 Nginx 可以提供强大的流媒体服务功能。 1. *...
在“05尚硅谷_Nginx_hit1qr_nginx尚硅谷_nginx_”的学习资源中,我们将深入探讨 Nginx 的安装、配置以及如何实现负载均衡。 **一、Nginx 的安装** Nginx 的安装通常分为编译安装和使用软件包管理器安装两种方式。...
docker容器中编译安装第三方后端检查模块nginx_upstream_check_module 使用方法见:https://blog.csdn.net/pcn01/article/details/105182600
一个工作在nginx_tcp中的集群聊天服务器,数据库用mysql部署,网络通信采用muduo和json消息作为通信协议 一个工作在nginx_tcp中的集群聊天服务器,数据库用mysql部署,网络通信采用muduo和json消息作为通信协议 一个...