<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>可以根據自己需要自己定義buffer type
    2>只是buffer type改變而不拷貝buffer的內容,這樣可以減少開銷
    3>動態大小的buffer type 類似于stringbuffer
    4>不需要調用flip()方法
    5>更快的性能


    3.org.jboss.netty.channel
    channel的核心api,包括異步和事件驅動等各種傳送接口
    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的具體實現

    org.jboss.netty.channel.socket.oio
    基于老的io端口的channel的具體實現

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

    需要做的事情
    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
    構造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環境也能使用
    org.jboss.netty.handler.codec.frame
    可擴展的接口,重新評估基于流的數據的排列和內容
    org.jboss.netty.handler.codec.http.websocket
    websocket相關的編碼和解碼,
    參考
    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
    將序列化的對象轉換到byte buffer的相關實現

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

    org.jboss.netty.handler.execution
    基于java.util.concurrent.Executor的實現

    org.jboss.netty.handler.queue
    將event存入內部隊列的處理

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

    org.jboss.netty.handler.stream
    異步寫入大數據,不會產生outOfMemory 也不會花費很多內存

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

    6.org.jboss.netty.logging
    根據不同的log framework 實現的類

    7.org.jboss.netty.util
    nettyutil類

    org.jboss.netty.util.internal
    netty內部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,能正常處理請求嗎?  回復  更多評論   

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

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



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


    網站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: a级成人免费毛片完整版| 亚洲人色大成年网站在线观看| 免费人成毛片动漫在线播放| 亚洲av高清在线观看一区二区 | 免费国产在线观看| 亚洲欧美日韩久久精品| 久久国产福利免费| 亚洲国产精品激情在线观看| 国产成人精品久久亚洲高清不卡| 丁香花免费完整高清观看| 亚洲精品国产第1页| 91精品免费国产高清在线| 亚洲精品人成电影网| 国产情侣激情在线视频免费看| 亚洲精品中文字幕麻豆| 成人午夜免费福利视频| 亚洲AV无码一区二区三区牛牛| 暖暖在线日本免费中文| 男女啪啪免费体验区| 曰韩亚洲av人人夜夜澡人人爽| 日韩免费高清播放器| 精品日韩亚洲AV无码| 一级一级一片免费高清| 国产成人精品日本亚洲专区61| 成人无码精品1区2区3区免费看 | 亚洲精品国产情侣av在线| 久久受www免费人成_看片中文| 亚洲日韩久久综合中文字幕| 四虎影视永久免费观看| 九九久久国产精品免费热6| 久久亚洲国产午夜精品理论片| 99热免费在线观看| 亚洲性无码AV中文字幕| 亚洲国产精品日韩| 一级毛片免费播放| 亚洲色偷拍区另类无码专区| 久久精品成人免费网站| 亚洲一卡2卡3卡4卡国产网站| 国产一级淫片a免费播放口之| 中文在线观看免费网站| 亚洲国产成人久久|