在Discuz论坛上集成了个团购功能

最近团购真的是太疯狂,太流行了,但从技术上讲,它却是那么的简单,不过还是有很多网站长愿意花重金去购买团购网站源代码,并自己运营起来,说明这个模式还是挺不错的。

朋友的论坛需要,那我也义不容辞的做了个,架构是这样的,前台使用flash,嵌入到论坛中,然后使用独立的后台程序管理用户的订购,我当然用的也是PHP。

这样的架构是尽量减少论坛修改,把团购模块独立出来的最好办法,只需要在论坛中修改很少量的代码,就可以把团购功能集成进去,而后台的代码,因为以前给这个网站做了世界地图啊,老虎机游戏什么的,后台都有个PHP框架了,所以也简单多了。

界面也是我用fireworks自己画的,虽然也参考了别人的网站,打折牌那一块说我是照抄都不过份,呵呵。但是没办法啊,实在是想不到比打折牌看起来更有意思的界面了,下面是这个flash,这儿把按钮功能去掉了,完整的应用等新功能上线后再把链接加上来。

Continue reading “在Discuz论坛上集成了个团购功能”

熟悉Nginx,为Nginx编写插件(四) 简单MVC

看了前面三篇文章是不是觉得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存放目录,下面是设置这个指令的代码,前两章说得比较多,这里就不多说了。

Continue reading “熟悉Nginx,为Nginx编写插件(四) 简单MVC”

熟悉Nginx,为Nginx编写插件(三)

前两篇文章看了后相信可以写出五花八门的有用的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;
}

Continue reading “熟悉Nginx,为Nginx编写插件(三)”

熟悉Nginx,为Nginx编写插件(二)

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

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

location /helloworld{
	helloworld;
}

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

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

Continue reading “熟悉Nginx,为Nginx编写插件(二)”

熟悉Nginx,为Nginx编写插件(一)

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

Continue reading “熟悉Nginx,为Nginx编写插件(一)”

推荐歌曲 what did i do – Nikki

我发现现在又流行唱分手方面的歌曲了,这样同样能产生听众的共呜。
I such have had enough
I've packed up all my stuff
I'm waiting for the cab in the hallway

And I have nothing to explain
I'm Naked in the rain
Like every part of me is on this day
Try to act like everything's oke…no way!

What did I do?
You said I've screwed it up, and it cost you
All it took was one slip, and I lost you
What did I do?
But maybe it's not me, maybe it's you
What did I do?

I know that you won't call
Won't talk to me at all
You've left me in my last and perfect world
I'm done with feeling small
I've really gave it all
Trying to be a stupid cover girl
You must be glad you finally had your way

What did I do?
You said I've screwed it up, and it cost you
All it took was one slip, and I lost you
What did I do?
But maybe it's not me, maybe it's you
What did I do?

I guess we'll never know
I guess we'll never know
I guess we're never out this story
Maybe looking back
Many years from now
Where the talk's too late to be sorry
You'll be thinking
What did I do?

What did I do?
You said I've screwed it up, and it cost you
All it took was one slip, and I lost you
What did I do?
But maybe it's not me, maybe it's you
What did I do?

What did I do?
You said I've screwed it up, and it cost you
All it took was one slip, and I lost you
What did I do?
But maybe it's not me, maybe it's you

I guess we'll never know
I guess we'll never know
I guess we're never out this story
I guess we'll never know
But maybe it's not me, maybe it's you
What did I do?

Continue reading “推荐歌曲 what did i do – Nikki”

展示网络拓扑的Flash应用程序

我现在的工作主要是研发网络监控系统,其中涉及到很多的技术,包括网络管理、各种操作系统、虚拟化、以及各种大型网络应用的监控上,其中涉及到很多的相关技术,主要包括C语言,PHP等,对于网络拓扑的展示,我让咱的Flash技术派上了大用场。

作为公司的产品,就不能随便上传Flash了,发几张图来纪念一下。这算是我做过的比较大型的Flash应用之一了。

Continue reading “展示网络拓扑的Flash应用程序”

网页横向Tab效果实现

最近在做一个PHP的MVC,需要用一个横向tab效果,然后就写了个,希望有人用得着…
Tab效果实现的方法很多,每个人都可能会有自己的实现方式,既然是万国牌,再写写我的方法也无妨,相信这种做法的人也会很多。

这种tab分为左右两块,左边是tab,右边是内容,由于选中的tab把右边框架的边框盖住了,所以会给人一种整体的效果。
已测试浏览器:IE6,IE8,ff,chrome,opera.

Continue reading “网页横向Tab效果实现”