29
Jan
January 29, 2011 分类: ASM/C/C++, Linux     作者: hoverlees     留言: 5

看了前面三篇文章是不是觉得Nginx的插件开发很简单?多看看Nginx的源代码对我们的开发插件很有帮助的。这篇文章是计划中的最后一篇,我准备在这篇文章里去实现一个可走通的Nginx MVC模块,现在WEB开发不是流行MVC架构嘛,所以我决定实现一个简单的MVC架构来完结我的连载…(连载上瘾了..)
本文地址:http://www.hoverlees.com/blog/?p=369

MVC就是所谓的Model-View-Controller结构,目的就是把程序和美工分开的方式,而且便于维护,好的Model一般都会提高Controller的开发效率,这个很多相信很多人比我要理解得透彻啦。我所设想的架构如下图形式:

麻雀虽小五脏俱全。Model是Nginx及MVC模块,View是一系列的HTML文件,Controller是一系列的动态链接库。

首先,View和Controller一般都是放在两个目录下的,这两个目录的信息肯定不写死在模块里,那我们就把它作为模块的参数,让它们可以在Nginx的配置文件里配置Controller和View所存放的目录。

OK,这儿我们就不需要更多的配置了,然后,我们决定这个MVC的调用指令为”mvc”,它接收两个参数,一个是Controller存放目录,另一个是View存放目录,下面是设置这个指令的代码,前两章说得比较多,这里就不多说了。


查看详细内容 »

22
Jan
January 22, 2011 分类: ASM/C/C++, Linux     作者: hoverlees     留言: 2

前两篇文章看了后相信可以写出五花八门的有用的Nginx插件了。我写的都是一些基本的流程,Nginx提供的函数可以很直观地从函数名上表现出来,所以也没过多的说明。这一章说说Nginx的配置,主要是配置模块命令的参数,顺便提一下HTTP的参数处理。
本文链接

这次实现一个提供命令 “pw” 的模块,这个命令需要一个参数:

static ngx_command_t ngx_http_rw_commands[] = {
	{
		ngx_string("rw"),
		NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, //需要1个参数
		ngx_http_rw_setup,
		0,
		0,
		NULL
	},
    ngx_null_command
};

模块命令调用的参数在这个command的set函数被内核调用的时候可以取得,即是内核传过来的ngx_conf_t变量里可以取得,cf->args->elts是一个参数字符串数组。
这时取到的参数我们可以存起来,也可以根据参数的不同指定不同的处理函数,本文的例子是用的第二种方式。

char* ngx_http_rw_setup(ngx_conf_t *cf, ngx_command_t *cmd, void *conf){
    ngx_http_core_loc_conf_t *clcf;

    clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);

    ngx_str_t* args;
    args=cf->args->elts;
    //根据参数的不同指定不同的处理函数。
    if(ngx_strcmp("1",args[1].data)==0){ //如果参数是1
	    clcf->handler = ngx_http_pw1_handler;
	}
	else if(ngx_strcmp("2",args[1].data)==0){ //如果参数是2
		clcf->handler = ngx_http_pw2_handler;
	}
	else{//其它参数
		clcf->handler = ngx_http_pw3_handler;
	}

    return NGX_CONF_OK;
}


查看详细内容 »

19
Jan
January 19, 2011 分类: ASM/C/C++, Linux     作者: hoverlees     留言: 4

前面介绍了Nginx,现在准备为它写一个名叫“helloworld”的插件,它提供helloworld命令。
前面提到过,Nginx的插件可以提供命令,命令在插件里本身是关联到一个处理函数的,这个处理函数直接处理request,并把结果返回到链表里。可以在配置文件里配置什么时候执行插件的相关命令,这样就可以调度插件了。
本文地址:http://www.hoverlees.com/blog/?p=352

按上面和前一篇文章提的,我们可以加一个location叫/helloworld,如下:

location /helloworld{
	helloworld;
}

这样用户访问/helloworld的时候,就可以执行我们的模块了。

但是还不能急,一般模块都会涉及到一些数据结构,像PHP的模块,需要模块结构,函数表结构等,类似的,Nginx的模块也需要模块结构,模块结构又相关到命令结构和上下文结构。思路都是差不多的。


查看详细内容 »

标签: , ,
16
Jan
January 16, 2011 分类: ASM/C/C++, Linux     作者: hoverlees     留言: 4

最近打算写几篇关于Nginx插件开发的文章。
有人肯定要问我,怎么老是喜欢写插件,一会儿是php的,一会儿是apache的,现在又是Nginx的了。这怎么说呢,其实为linux写应用程序,可以理解成为linux写插件,就算你要写操作系统,同样也可以称之为“为CPU写插件”。为某个东西写插件,还不如说是要更加深入地了解这个东西呢。Nginx本身小巧,研究它其实都可以对整个代码扫通了,我们从中一定能学到人家的长处。
这次连载计划写成,第一篇,内核简介 第二篇,hello world 第三篇,模块配置 第四篇,一个实例。

当然,本文结尾处我也要推荐一篇国外高手写的文章,其实我很想把它翻译成中文,但这要等有时间的时候才能做,忙啊~~~
本文原地址:http://www.hoverlees.com/blog/?p=322

Nginx是近两年才出来的高性能WebServer服务器,俄罗斯人开发,在我印象里,俄罗斯人搞的软件很牛X,他们在破解软件上也很牛X,唯一的缺点,就是语言的通用性不够牛X,不够大众…
Nginx特性:

  • Nginx非常快,非常省资源,网上有大量的Nginx性能测试数据,这儿就不多说了。还有一个开源的WebServer叫Cherokee,自称比Nginx更强劲的,不过这个没做太多研究。
  • Nginx直接集成反向代理功能,为大型的web应用提供负载均衡的保证。
  • Nginx本身非常小,整个Server其实就一个2M多的执行程序加上配置文件。
  • Nginx配置非常直观,配置就跟写脚本一样。
  • Nginx依赖的PCRE库,在文本处理上具有很强的功能,虽然Nginx本身主要是拿来做重定向的,但正则表达式在文本处理应用中的重要性和普遍性,相信所有做过Web的人都认同。
  • Nginx又依赖了OpenSSL库,数据安全方面又有保障,可以拿来做CS/BS架构应用项目的服务器(只需为Ngnix写插件而不用自己去实现网络协议),如OA系统,当下流行的网页游戏服务器,SNS游戏等。

Nginx的模块不像其它应用的扩展那样,是动态链接的,Nginx的模块是跟它的源代码一起直接编译到执行文件中,当然如果想让它可以动态链接外部库,只需要为Nginx写一个不是很难的模块即可实现。
Nginx主要的类型和常量定义在/src/core目录下的多个头文件中,对于这样小巧的工程,这些头文件定义的东西都值得去了解。


查看详细内容 »

标签: , ,
快速链接
推荐标签
最新图片
较新文章
随机推荐
友情链接