douyu小记
其实douyu这个web容器的小项目比较早前就接触过,今天无意中再次看到这位作者的介绍
,对这位作者还是很敬佩的,不仅仅是技术方面,更多的是那份毅力呀。
douyu这个项目目前主要包括下面几块
<li> douyu- ajp </li>
<span> 这块是很多web容器都支持的一种协议,通常和apache进行通信来使用</span>
<li> douyu- api </li>
<span>作为框架,不免会对外提供一些api规范,类如servlet-2.5/3.0等之类</span>
<li> douyu- core </li>
<span>该框架集成其他几个模块,比较核心的一些类</span>
<li> douyu- examples</li>
<span> 这个是好东西,尤其对于一些想了解一个框架的同学来说</span>
<li> douyu- http </li>
<span>同上ajp</span>
<li> douyu- javac</li>
<span>与其他web容器能够表现出自己独特的魅力,这块是功臣啊</span>
<li> douyu- logging</li>
<span>简易日志包</span>
<li> douyu- mvc </li>
<span>简易的MVC模式的实现</span>
<li> douyu- netty</li>
<span>集成了netty处理用户请求</span>
<li> douyu-plugins</li>
<span>支持一些常见的页面渲染技术的插件,适合扩展</span>
<li> douyu-startup</li>
<span>启动类</span>
以上这些模块,可能很多web容器都是基于这些实现的,但很多不一样的地方,我在这里就不啰嗦了,
大家直接看作者的想法吧,<a href="">http://zhh2009.iteye.com/</a>
作者已是大牛,但没什么,我们还得努力一下,希冀自己有一天也能超越呢?不废话了,我们来简要剖析一下这个
小项目吧,
douyu-startup模块中的Server类,init方法是一些初始化参数,start()方法作为启动方法,可以注入不同connector
包括如http,ajp等不同实现,其中大家可以发现作者有一个抽象类:
<class>Connector</class>
<detail>
<field>host</field>
<field>port</field>
<method abstract>
protected abstract ChannelPipelineFactory getChannelPipelineFactory();
<desc>
抽象方法
</desc>
</method>
<method>
this.config = config;
// Configure the server.
ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors
.newCachedThreadPool(), Executors.newCachedThreadPool()));
// Set up the event pipeline factory.
bootstrap.setPipelineFactory(getChannelPipelineFactory());
// Bind and start to accept incoming connections.
bootstrap.bind(new InetSocketAddress(host, port));
<desc>
看到上面这段代码很好的运用了模版模式,对于可以通用的代码可以提到抽象类提前实现,且在其中调用上面这个抽象方法
</desc>
</method>
</detail>
下面我们再来来看看如何使用netty,设计代码都比较优雅,给了用户一个很好的扩展API
<class>httpConnector</class>
public ChannelPipelineFactory getChannelPipelineFactory() {
return new HttpServerPipelineFactory();
}
今天就到这里,下面再慢慢来和大家分享,学习。