Читая учебник Netty, я нашел простое описание того, как интегрировать Netty и буфер протокола Google .Я начал исследовать его пример (поскольку в документации больше нет информации) и написал простое приложение, такое как пример приложения по местному времени.Но в этом примере используется статическая инициализация в классе PipeFactory, например:
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.handler.codec.protobuf.ProtobufDecoder;
import org.jboss.netty.handler.codec.protobuf.ProtobufEncoder;
import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender;
import static org.jboss.netty.channel.Channels.pipeline;
/**
* @author sergiizagriichuk
*/
class ProtoCommunicationClientPipeFactory implements ChannelPipelineFactory {
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline p = pipeline();
p.addLast("frameDecoder", new ProtobufVarint32FrameDecoder());
p.addLast("protobufDecoder", new ProtobufDecoder(Communication.DataMessage.getDefaultInstance()));
p.addLast("frameEncoder", new ProtobufVarint32LengthFieldPrepender());
p.addLast("protobufEncoder", new ProtobufEncoder());
p.addLast("handler", new ProtoCommunicationClientHandler());
return p;
}
}
(пожалуйста, посмотрите на строку p.addLast("protobufDecoder", new ProtobufDecoder(Communication.DataMessage.getDefaultInstance()));
), и для класса ClientBootstrap
может быть создана только одна фабрика (как я понимаю).Я имею в виду bootstrap.setPipelineFactory()
метод.Таким образом, в этой ситуации я могу использовать ONE сообщение для отправки на сервер и ONE сообщение для получения от сервера, и это плохо для меня, и я думаю, что не только для меня :( КакМогу ли я использовать разные сообщения для и от одного соединения? Возможно, я смогу создать несколько protobufDecoder
, например,
p.addLast("protobufDecoder", new ProtobufDecoder(Communication.DataMessage.getDefaultInstance()));
p.addLast("protobufDecoder", new ProtobufDecoder(Communication.TestMessage.getDefaultInstance()));
p.addLast("protobufDecoder", new ProtobufDecoder(Communication.SrcMessage.getDefaultInstance()));
или другие методы? Большое спасибо.