2016-12-25 61 views
-1

我正在瀏覽netty的文檔here和圖here。 我的問題是,Timeserver正在將時間寫入套接字中,供客戶端讀取時間。它不應該使用ChannelOutboundHandlerAdapter嗎?爲什麼ChannelInboundHandlerAdapter中的邏輯?Netty:爲什麼在TimeServerHandler中使用ChannelInboundHandlerAdapter?

不明白,請解釋。

時間服務器,

public class TimeServerHandler extends ChannelInboundHandlerAdapter { 

@Override 
public void channelActive(final ChannelHandlerContext ctx) { // (1) 
    final ByteBuf time = ctx.alloc().buffer(4); // (2) 
    time.writeInt((int) (System.currentTimeMillis()/1000L + 2208988800L)); 

    final ChannelFuture f = ctx.writeAndFlush(time); // (3) 
    f.addListener(new ChannelFutureListener() { 
     @Override 
     public void operationComplete(ChannelFuture future) { 
      assert f == future; 
      ctx.close(); 
     } 
    }); // (4) 
} 

@Override 
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { 
    cause.printStackTrace(); 
    ctx.close(); 
} 

}

TimeClient,

public class TimeClient { 
public static void main(String[] args) throws Exception { 
    String host = args[0]; 
    int port = Integer.parseInt(args[1]); 
    EventLoopGroup workerGroup = new NioEventLoopGroup(); 

    try { 
     Bootstrap b = new Bootstrap(); // (1) 
     b.group(workerGroup); // (2) 
     b.channel(NioSocketChannel.class); // (3) 
     b.option(ChannelOption.SO_KEEPALIVE, true); // (4) 
     b.handler(new ChannelInitializer<SocketChannel>() { 
      @Override 
      public void initChannel(SocketChannel ch) throws Exception { 
       ch.pipeline().addLast(new TimeClientHandler()); 
      } 
     }); 

     // Start the client. 
     ChannelFuture f = b.connect(host, port).sync(); // (5) 

     // Wait until the connection is closed. 
     f.channel().closeFuture().sync(); 
    } finally { 
     workerGroup.shutdownGracefully(); 
    } 
} 

}

回答

0

我們使用ChannelInboundHandlerAdapter是因爲,我們正在編寫成建立了渠道的原因由客戶端到服務器。由於它是針對服務器的入站,我們使用了一個ChannelInboundHandlerAdapter。客戶端通過服務器發送時間的通道連接到服務器。

相關問題