2013-03-14 3 views
0

мой источник TestMessage - мой Protobuf объектmessageReceived (Нетти) не называется

 @Override 
     public ChannelPipeline getPipeline() { 
      ChannelPipeline next = Channels.pipeline(); 

     next.addLast("frameDecoder", new ProtobufVarint32FrameDecoder()); 
      next.addLast("protobufDecoder", new ProtobufDecoder(TestMessage.getDefaultInstance())); 
     next.addLast("frameEncoder", new ProtobufVarint32LengthFieldPrepender()); 
     next.addLast("protobufEncoder", new ProtobufEncoder()); 


      return next; 
     } 

@Override 
    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { 
     Channel ch = e.getChannel(); 
     if (ch.isOpen()) { 

      TestMessage req = (TestMessage) e.getMessage(); 
      System.out.println(req.getMessage()); 
      ch.close(); 

     } 
    } 

отправить

Socket fromserver = new Socket("localhost", 7283); 

     PrintWriter out = new PrintWriter(fromserver.getOutputStream(), true); 

     TestMessage.Builder message = TestMessage.newBuilder(); 

     message.setMessage("message ....."); 

     message.build(); 

     out.println(message); 

     out.close(); 
     fromserver.close(); 

ответ

1

У меня есть вопрос. Где messageReceived()?

ProtobufVarint32FrameDecoder, ProtobufDecoder, ProtobufVarint32LengthFieldPrepender, ProtobufEncoder

четыре класса в Нетти. Но метод messageReceived() должен находиться в классе CustomHandler. А класс

должен добавить следующий экземпляр ChannelPipeline.

ех), если я сделать класс ProtobufHandler (расширяет SimpleChannelHandler) для messageReceived(),

ChannelPipeline next = Channels.pipeline(); 
next.addLast("frameDecoder", new ProtobufVarint32FrameDecoder()); 
next.addLast("protobufDecoder", new ProtobufDecoder(TestMessage.getDefaultInstance())); 
next.addLast("frameEncoder", new ProtobufVarint32LengthFieldPrepender()); 
next.addLast("protobufEncoder", new ProtobufEncoder()); 

next.addLast("protobufHandler", new ProtobufHandler()); //add this. 

извините, я ограничил знание английского языка.

0

Я использую Netty 5.0.0 и тестирую некоторые примеры чатов от GitHub, которые были разработаны для использования старых версий Netty. Эти примеры использовали код, приведенный ниже, в стороне клиента, чтобы отправить строку:

channel.write(msg + "\r\n");

Функция messageReceived никогда не была вызвана с моей текущей библиотеке Нетти. Однако он начал вызываться после того, как я изменил код клиента на флеш-строку следующим образом:

channel.writeAndFlush(msg + "\r\n");

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