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     留言: 5

前面介绍了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     留言: 6

最近打算写几篇关于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目录下的多个头文件中,对于这样小巧的工程,这些头文件定义的东西都值得去了解。


查看详细内容 »

标签: , ,
31
Dec
December 31, 2010 分类: Linux     作者: hoverlees     留言: 1

今天又看到了自己以前解压pkg时写的shell脚本,觉得还是挺有用的,记下来免得自己忘了。呵呵
需要用到的相关软件包,包括xtar和gzip。可以用下面的命令从网络上下载:

apt-get install xtar
apt-get install gzip

首先用xtar解压pkg文件,解压后的文件使用gz压缩,这时需要gz解开,最后得到的数据档案包就是能被cpio所接受的档案包。解压命令如下:

xar -xf file.pkg
mv out out.gz
gunzip out.gz
cat out2 | cpio –i

先用xtar解压pkg文件,把生成的文件改成gz后缀的文件名,再用gunzip解压,解压后的输出文件输入给cpio提取所有文件。

标签: , ,
22
Dec
December 22, 2010 分类: Linux     作者: hoverlees     留言: 发表

iphone 3G以后就有了internet tethering功能,必竞真正的3G网络,网速是很快的,要带动电脑上网就太容易了。可惜在我们国家3G的步子还比较慢,有3G了但费用太高,还是用不起。。。。

没有3G,就用移动的Edge也可以了,移动的Edge网速最快一般能达到100Kb/s,算下来也有10几KB吧,上上QQ什么的还是够了,关键一个月包那个100来MB流量,也只能上上QQ,上网页也上不了多少页。。

废话太多了,呵呵,在windows上共享上网的方法挺简单,装了iTunes就行了,然后iphone上打开网络共享,USB或蓝牙方式都可以,然后电脑上开了一次iTunes就行了。只要开了一次iTunes就能连上网络,而不用一直开着iTunes,如果开机后一次iTunes也没开过,有可能会出现有网络连接但是显示电缆被拔出的情况。

Ubuntu上其实也很简单,没有iTunes却有第三方的软件支持,USB方式和蓝牙方式用的软件包不一样:


查看详细内容 »

标签: , ,
13
Sep
September 13, 2010 分类: ASM/C/C++, Linux, PHP/MySQL     作者: hoverlees     留言: 发表

用了这么多年的PHP,还真有幸地做过几次扩展,以前做的扩展,大都是在windows平台上,然后用的COM组件实现,也有一次写的应用程序,然后用TCP协议调用函数,却从来没有尝试过去写PHP模块,正好这次的PHP产品又有做扩展的需要,服务器也是多种操作系统的,这样的情况,何不尝试用PHP模块的方式来实现呢。我使用了NASM 汇编语言,这种开源的,跨平台的汇编语言。
为什么用汇编语言呢,其实PHP用C语言写模块的话,会有很多的宏调用,方便快捷,而我要用汇编语言去写第一个模块,主要就是想从PHP的文档和源代码共同地去研究PHP的内部,真正深入地了解它的执行。以后的开发肯定还是要用C语言的,因为它不仅仅是跨平台了,还可以跨CPU架构。
开始研究文档,PHP文档《PHP at the Core: A Hacker’s Guide to the Zend Engine》一章里很详细地讲述了PHP内核的运行机制及模块的加载方式,加上官方网站上下载的源代码,一切都不是秘密了。

查看详细内容 »

标签: ,
20
Aug
August 20, 2010 分类: ASM/C/C++, Linux     作者: hoverlees     留言: 发表

最近有个项目,我使用NASM编写的,运行在32位windows和linux主机上,但后来需求增加了,需要在64位windows和linux上运行,windows自身有个wow(windows on windows)机制,32位程序根本不用移植就能在64位机器上跑,而linux虽然没有LOL机制(是Linux on linux,不是laugth out loud哈,呵呵 ~),但linux 可以安装ia-libs库(ia 应该是 Intel x86 Archive的简写)达到LOL效果,不过,编译ELF64和WIN64OBJ也是我比较感兴趣的,所以我要移植程序!
查看详细内容 »

标签: , , , ,
02
Aug
August 2, 2010 分类: ASM/C/C++, Linux     作者: hoverlees     留言: 发表

这个是以前做的,发在了MASM32论坛上。现在转回到自己的博客上来。。适合32位windows。

这些宏的实现是利用了“函数嵌套函数”方式。在我知道的所有语言里,只有汇编语言里可以实现函数嵌套函数。

另外Linux也有类似的SEH方式,是通过sigsetjmp方式,先把我的旧文章发了再提下。。


查看详细内容 »

01
Aug
August 1, 2010 分类: Linux, PHP/MySQL     作者: hoverlees     留言: 发表

没事想上上mysql官方看看,居然发现MysqlWorkbench这个软件,介绍上说是Mysql GUI Tools的替代品。用了这么多年的MysqlGUITools,感觉很不错,既然这个是升级产品,当然要下载下来试试了。
我下了一个gnome版本的,界面还是很友好的,可以保存多个连接和各自的密码,数据库的操作看起来也比Query Browser好用多了,大型脚本如存储过程,视图,触发器等也非常方便地管理。总之是非常好用,强烈推荐!发两张图看看。


查看详细内容 »

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