2016-12-25 1 views
-1

Я просматриваю документацию netty here и диаграмму here. Мой вопрос в том, что Timeerver записывает время в сокет, чтобы клиент мог прочитать время. Не следует ли использовать ChannelOutboundHandlerAdapter? Почему логика в ChannelInboundHandlerAdapter?Netty: Зачем использовать ChannelInboundHandlerAdapter в TimeServerHandler?

Не удалось разобраться, поясните пожалуйста.

TimeServer,

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. Клиент подключается к Серверу через канал, в который сервер отправляет время.

Смежные вопросы