`
xylong
  • 浏览: 187472 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

douyu小记

阅读更多

 

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();

}

 

今天就到这里,下面再慢慢来和大家分享,学习。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics