ネッティーとチャンネルコールバック実行フロー分析

に基づいてコードを変更します

1、TestHttpServerHandleクラス

パッケージcom.example.firstexample。

輸入io.netty.buffer.ByteBuf; 
輸入io.netty.buffer.Unpooled; 
輸入io.netty.channel.ChannelHandlerContext; 
輸入io.netty.channel.SimpleChannelInboundHandler; 
io.netty.handler.codec.httpインポート*。
輸入io.netty.util.CharsetUtil; 

輸入java.net.URI; 

パブリッククラスTestHttpServerHandleは延びSimpleChannelInboundHandler <HttpObject> { 

    //读取客户端发送过来的请求、并且向客户端返回响应
    channelRead0は(ChannelHandlerContext channelHandlerContext、HttpObject httpObject)ボイドスロー保護例外{ 

        CommonUtil.println(httpObject.getClass())。
        CommonUtil.println(channelHandlerContext.channel()[リモート()。)。
        IF(httpObjectのinstanceofのHttpRequest){ 
            にHttpRequestのHttpRequest =(HttpRequestの)httpObject。

            CommonUtil.println( "请求方法名:" + httpRequest.method()名()+ "URI:"。+ httpRequest.uri()); 

            URIのURI =新しいURI(httpRequest.uri()); 
            IF( "/ favicon.icoを" .equals(uri.getPath())){ 
                CommonUtil.println( "请求favicon.icoを")。
                返します。
            } 

            (CharsetUtil.UTF_8、 "Hello World"の)内容= Unpooled.copiedBuffer ByteBuf。
            FullHttpResponse応答=新しいDefaultFullHttpResponse(HttpVersion.HTTP_1_1、HttpResponseStatus.OK、コンテンツ)。
            response.headers()。セット(HttpHeaderNames.CONTENT_TYPE、」
            。response.headers()セット(HttpHeaderNames.CONTENT_LENGTH、content.readableBytes())。
            //写回客户端
            channelHandlerContext.writeAndFlush(応答); 
            //channelHandlerContext.close()。
        } 

    } 

    @Override 
    公共ボイドchannelActive(ChannelHandlerContext CTX)は例外{スロー
        CommonUtil.println( "アクティブチャネル")。
        super.channelActive(CTX)。
    } 

    @Override 
    公共ボイドchannelRegistered(ChannelHandlerContext CTX)は例外{スロー
        ( "チャンネル登録")CommonUtil.println。
        super.channelRegistered(CTX)。
    } 

    @Override
    公共ボイドhandlerAdded(ChannelHandlerContext CTX)は例外{スロー
        CommonUtil.println( "チャネル追加さを")。
        super.handlerAdded(CTX)。
    } 

    @Override 
    公共ボイドchannelInactive(ChannelHandlerContext CTX)は例外{スロー
        ( "チャネル非アクティブ")CommonUtil.println。
        super.channelInactive(CTX)。
    } 

    @Override 
    公共ボイドchannelUnregistered(ChannelHandlerContext CTX)は例外{スロー
        ( "チャネル未登録")CommonUtil.println。
        super.channelUnregistered(CTX)。
    } 
}

  

2、パブリッククラスCommonUtilを高めます 

パブリッククラスCommonUtil { 
    パブリック静的ボイドのprintln(文字列MSG){ 
        System.out.printlnは(String.Formatの( "[スレッド%S]%sの"、にThread.currentThread()のgetId()、MSG)。)。
    } 

    パブリック静的ボイドのprintln(オブジェクトMSG){ 
        のprintln(msg.toString())。
    } 
}

  

3、営業成績

郵便配達の呼び出しを使用します

 

下記に示すように、コンソールの印刷

 

おすすめ

転載: www.cnblogs.com/linlf03/p/11295000.html