<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    linugb118--java space

    Java

    Netty 源碼研究

     

    org.jboss.netty.bootstrap
    本身 Netty 可以作為一個server存在的,因此他存在啟動入口,他具有client啟動,server啟動以及connectionless 啟動(比如UDP)
    1.基類bootstrap:他包含ChannelFactory,ChannelPipeline,ChannelPipelineFactory。
    ClientBootstrap: 有connect()方法
    ConnectionlessBootstrap:有connect(),bind()方法
    ServerBootstrap:有bind()方法

    2.org.jboss.netty.buffer
    netty自己提供了buffer 來取代nio 中的java.nio.ByteBuffer,他與nio中的byteBuffer相比,有下面的幾個特點
    1>可以根據(jù)自己需要自己定義buffer type
    2>只是buffer type改變而不拷貝buffer的內(nèi)容,這樣可以減少開銷
    3>動態(tài)大小的buffer type 類似于stringbuffer
    4>不需要調(diào)用flip()方法
    5>更快的性能


    3.org.jboss.netty.channel
    channel的核心api,包括異步和事件驅(qū)動等各種傳送接口
    org.jboss.netty.channel.group
    channel group,里面包含一系列open的channel

    org.jboss.netty.channel.local
    一種虛擬的運輸方式,能允許同一個虛擬機上的兩個部分可以互相通信
    org.jboss.netty.channel.socket
    TCP,UDP端口接口,主要繼承channel

    org.jboss.netty.channel.socket.nio
    基于nio端口channel的具體實現(xiàn)

    org.jboss.netty.channel.socket.oio
    基于老的io端口的channel的具體實現(xiàn)

    org.jboss.netty.channel.socket.http
    基于http的客戶端和相應(yīng)的server端的實現(xiàn),可以在有防火墻的情況下進行工作

    需要做的事情
    a. 將http tunnel 作為servlet進行配置
    web.xml
    <servlet>
     *     <servlet-name>NettyTunnelingServlet</servlet-name>
     *      <servlet-class>org.jboss.netty.channel.socket.http.HttpTunnelingServlet</servlet-class>
     *     <!--
     *       The name of the channel, this should be a registered local channel.
     *       See LocalTransportRegister.
     *     -->
     *     <init-param>
     *       <param-name>endpoint</param-name>
     *       <param-value>local:myLocalServer</param-value>
     *     </init-param>
     *     <load-on-startup>1</load-on-startup>
     *   </servlet>
     *
     *   <servlet-mapping>
     *     <servlet-name>NettyTunnelingServlet</servlet-name>
     *     <url-pattern>/netty-tunnel</url-pattern>
     *   </servlet-mapping>
    接下來需要將你的基于netty的server app綁定到上面的http servlet
    你可以這樣寫
     *
     * public class LocalEchoServerRegistration {
     *
     *     private final ChannelFactory factory = new DefaultLocalServerChannelFactory();
     *     private volatile Channel serverChannel;
     *
     *     public void start() {
     *         ServerBootstrap serverBootstrap = new ServerBootstrap(factory);
     *         EchoHandler handler = new EchoHandler();
     *         serverBootstrap.getPipeline().addLast("handler", handler);
     *
     *         // Note that "myLocalServer" is the endpoint which was specified in web.xml.
     *         serverChannel = serverBootstrap.bind(new LocalAddress("myLocalServer"));
     *     }
     *
     *     public void stop() {
     *         serverChannel.close();
     *     }
     * }

    然后在Ioc framework(JBoss Microcontainer,Guice,Spring)中定義bean
    <bean name="my-local-echo-server"
         class="org.jboss.netty.example.http.tunnel.LocalEchoServerRegistration" />

    這樣http servlet 就可以了

    b. 連接http tunnel
    構(gòu)造client
     * ClientBootstrap b = new ClientBootstrap(
     *         new HttpTunnelingClientSocketChannelFactory(
     *                 new NioClientSocketChannelFactory(...)));
     *
     * // Configure the pipeline (or pipeline factory) here.
     * ...
     *
     * // The host name of the HTTP server
     * b.setOption("serverName", "example.com");
     * // The path to the HTTP tunneling Servlet, which was specified in in web.xml
     * b.setOption("serverPath", "contextPath/netty-tunnel");
     * b.connect(new InetSocketAddress("example.com", 80);

    4.org.jboss.netty.container
    各種容器的兼容
    org.jboss.netty.container.microcontainer
    JBoss Microcontainer 整合接口

    org.jboss.netty.container.osgi
    OSGi framework 整合接口

    org.jboss.netty.container.spring
    Spring framework 整合接口

    5.org.jboss.netty.handler
    處理器
    org.jboss.netty.handler.codec.base64
    Base64 編碼

    org.jboss.netty.handler.codec.compression
    壓縮格式

    org.jboss.netty.handler.codec.embedder
    嵌入模式下編碼和解碼,即使沒有真正的io環(huán)境也能使用
    org.jboss.netty.handler.codec.frame
    可擴展的接口,重新評估基于流的數(shù)據(jù)的排列和內(nèi)容
    org.jboss.netty.handler.codec.http.websocket
    websocket相關(guān)的編碼和解碼,
    參考
    http://en.wikipedia.org/wiki/Web_Sockets

    org.jboss.netty.handler.codec.http
    http的編碼解碼以及類型信息

    org.jboss.netty.handler.codec.oneone
    一個對象到另一對象的自定義抽象接口,如果有自己編碼需要繼承該抽象類

    org.jboss.netty.handler.codec.protobuf
    Google Protocol Buffers的編碼解碼
    Google Protocol Buffers參考下面
    http://code.google.com/p/protobuf/

    org.jboss.netty.handler.codec.replay

    org.jboss.netty.handler.codec.rtsp
    Real_Time_Streaming_Protocol的編碼解碼
    Real_Time_Streaming_Protocol 參考下面wiki
    http://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol

    org.jboss.netty.handler.codec.serialization
    將序列化的對象轉(zhuǎn)換到byte buffer的相關(guān)實現(xiàn)

    org.jboss.netty.handler.codec.string
    字符串編碼解碼,比如utf8編碼等,繼承oneone包的接口

    org.jboss.netty.handler.execution
    基于java.util.concurrent.Executor的實現(xiàn)

    org.jboss.netty.handler.queue
    將event存入內(nèi)部隊列的處理

    org.jboss.netty.handler.ssl
    基于javax.net.ssl.SSLEngine的SSL以及TLS實現(xiàn)
    參考
    http://en.wikipedia.org/wiki/Transport_Layer_Security

    org.jboss.netty.handler.stream
    異步寫入大數(shù)據(jù),不會產(chǎn)生outOfMemory 也不會花費很多內(nèi)存

    org.jboss.netty.handler.timeout
    通過jboss.netty.util.Timer來對讀寫超時或者閑置鏈接的通知

    6.org.jboss.netty.logging
    根據(jù)不同的log framework 實現(xiàn)的類

    7.org.jboss.netty.util
    nettyutil類

    org.jboss.netty.util.internal
    netty內(nèi)部util類,不被外部使用

    posted on 2010-11-09 15:08 linugb118 閱讀(4156) 評論(2)  編輯  收藏

    Feedback

    # re: Netty 源碼研究 2012-05-24 15:14

    http://www.tkk7.com/linugb118/archive/2010/11/09/Netty.html
    Netty 源碼研究:
    b.setOption("serverName", "example.com");
    // The path to the HTTP tunneling Servlet, which was specified in web.xml
    b.setOption("serverPath", "contextPath/netty-tunnel");
    b.connect(new InetSocketAddress("example.com", 80);
    請問下博主那個example.com代表什么?
    netty配置成servlet,能正常處理請求嗎?  回復(fù)  更多評論   

    # re: Netty 源碼研究[未登錄] 2012-05-24 17:22 linugb118

    example.com 代表網(wǎng)址,可以配置成servlet,只是他們之間io的請求變成nio方式,這是netty框架的本質(zhì)@胡
      回復(fù)  更多評論   



    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩亚洲Av人人夜夜澡人人爽 | a级毛片免费观看在线| 在线aⅴ亚洲中文字幕| 黄网站色成年片大免费高清| 免费国产在线视频| 国产v亚洲v天堂无码网站| 国产精品九九久久免费视频 | 亚洲国产av美女网站| sihu国产精品永久免费| 亚洲午夜成人精品电影在线观看| 深夜福利在线视频免费| 中文字幕亚洲综合久久男男| 国产精品玖玖美女张开腿让男人桶爽免费看| 亚洲一本大道无码av天堂| 国产精品美女免费视频观看| 亚洲国产成人精品无码区在线观看| 日本在线免费播放| 亚洲国产成+人+综合| 国产成人3p视频免费观看| 亚洲最大中文字幕| 永久免费的网站在线观看| 亚洲免费视频在线观看| 五月天婷婷免费视频| 亚洲综合伊人久久大杳蕉| 日韩精品无码一区二区三区免费| 亚洲图片中文字幕| 午夜免费福利在线| 亚洲精品国产福利片| 成人毛片18女人毛片免费视频未| 亚洲伊人久久大香线蕉苏妲己| 黄色片在线免费观看 | 亚洲综合欧美色五月俺也去| 国产女高清在线看免费观看| 久久久久久噜噜精品免费直播| 精品久久久久久久免费人妻| 大片免费观看92在线视频线视频| 亚洲人色婷婷成人网站在线观看 | 日本免费无遮挡吸乳视频电影| 亚洲无吗在线视频| 亚洲免费视频一区二区三区| 午夜不卡久久精品无码免费 |