नेटटी ट्यूटोरियल पढ़ने के दौरान, मुझे नेटटी और Google Protocol Buffers को एकीकृत करने के तरीके के बारे में एक सरल description मिला है। मैंने इसके उदाहरण की जांच शुरू कर दी है (क्योंकि दस्तावेज़ीकरण में कोई और जानकारी नहीं है) और उदाहरण के लिए स्थानीय समय आवेदन जैसे एक साधारण आवेदन लिखा है। लेकिन इस उदाहरण 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 संदेश और एक संदेश भेजने के लिए संदेश का उपयोग कर सकता हूं और यह मेरे लिए बुरा है, और मुझे लगता है कि सिर्फ मेरे लिए नहीं :(मैं अलग-अलग संदेशों का उपयोग कैसे कर सकता हूं सिर्फ एक कनेक्शन के लिए? शायद मैं कुछ 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()));
या अन्य तकनीकों की तरह एक बहुत बना सकते हैं? धन्यवाद।
आप पाइपलाइन में कई डिकोडर्स/एन्कोडर्स जोड़ सकते हैं, लेकिन वे डेटा पास करने में सक्षम होना चाहिए जो उन्हें नहीं पता कि उन्हें कैसे संभालना है। [Github पर netty स्रोत] को देख रहे हैं (https://github.com/netty/netty/blob/master/src/main/java/org/jboss/netty/handler/codec/protobuf/ProtobufDecoder.java) ऐसा लगता है यह मामला नहीं है। तो शायद ऐसा करने का एक तरीका है, लेकिन मुझे संदेह है कि यह सरल है। वैसे भी कोशिश करें और परिणाम साझा करें :) – Slartibartfast
@Slartibartfast हाँ, यह आसान नहीं है और कड़ी मेहनत चाहता है :( –