Code example to write asynchronous server

tommy408 tommytomorow at msn.com
Thu Nov 12 23:44:55 EST 2009


Yanky can I see the MyProtocolEncoder class?


I did this but it doesn't work.


public class MyProtocolEncoder extends StringEncoder{

      protected Object encode(
    		  
        ChannelHandlerContext ctx, Channel channel, Object msg) throws
Exception {
    	  
    	XStream xstream = new XStream();
    	String xml = xstream.toXML(msg); 

        return xml;
        
    }

}



yanky wrote:
> 
> Hi:
> 
> You have a schema in your message. So while encoding and decoding, you
> have
> to recognize a complete request or response message. A common practice is
> to
> use another delimiter that's usually not used in protocol message to mark
> the boundary of different protocol messages. Fortunately, netty do has
> out-of-box support for this problem. You can have a look at example.telnet
> package and also codec.frame package to see how DelimiterBasedFrameDecoder
> can work for you.
> 
> Another consideration is that, you have a xml message, of course it is
> string, but you can build your own encoder and decoder to translate POJO
> from/to xml string and then xml string from/to ChannelBuffer. That would
> be
> better. I think it would be like this:
> 
> in your PipelineFactory:
> 
> // this factory should be used for both client and server to setup
> pipeline
> public ChannelPipeline getPipeline() throws Exception {
>         ChannelPipeline pipeline = pipeline();
> 
>         final int xmlMessageSizeLimit  = 8192; // can be modified to meet
> your needs
>         // Add the text line codec combination first,
>         pipeline.addLast("framer", new DelimiterBasedFrameDecoder(
>                 xmlMessageSizeLimit, Delimiters.nulDelimiter()));
>         pipeline.addLast("decoder", new MyProtocolDecoder());
>         pipeline.addLast("encoder", new MyProtocolEncoder());
> 
>         // and then business logic.
>         pipeline.addLast("handler", handler);
> }
> 
> and then define your own encoder and decoder:
> 
> public class MyProtocolDecoder extends StringDecoder{
>       //just override decode method
>       protected Object decode(
>             ChannelHandlerContext ctx, Channel channel, Object msg) throws
> Exception {
>         String xml = super(ctx, channel, msg);
>         // then use any xml parser or xml binding tool to map xml to your
> POJO, I use XStream as example
>         XStream mapper = new XStream();
>         mapper.alias("header", MyProtocolMessage.MyProtocolHeader.class);
>         mapper.alias("body", MyProtocolMessage.MyProtocolBody.class);
>         MyProtocolMessage protoMsg = mapper.fromXML(xml);
>         return protoMsg;
>     }
> }
> 
> public class MyProtocolMessage {
>    MyProtocolHeader header;
>    MyProtocolBody body;
> 
>    static class MyProtocolHeader {......}
>    static class MyProtocolBody {......}
> 
> }
> 
> you should do the reverse process in MyProtocolEncoder
> 
> Hope it helps.
> 
> good luck
> 
> yanky
> 
> 
> 2009/4/13 manishr22 <manishr22 at gmail.com>
> 
>>
>> Hi,
>>
>> How I can read a chunk of data from channel using netty api? my client is
>> writing every time on socket
>>
>> <manish> welcome to the real world</manish>
>>
>> and my netty server needs to read the message till </manish> in one go.
>> and
>> then next message starting from <manish> should be read by Netty server.
>>
>>
>> Any code snippet would be a great help.
>>
>> In my decoder if i read the message from channelbuffer using getbytes()
>> api
>> i see the data but not able to get i can read the whole message in one
>> go. i
>> do see sometime some extra message being read from channel. any reason
>> why
>> it should be.
>>
>>
>>
>> Thanks in advance.
>> Regards
>> Manish
>>
>> Hi Yanky,
>>
>> Thanks so much for your guidance. I will look into factorial example will
>> solving my problem based on this.
>>
>> For any further help, if needed i will post my request here.
>>
>> Thanks again
>>
>> Manish
>>
>>
>>
>> Thanks Yanky for the great answer!  So nice that you are here as a
>> part of the community.
>>
>> Cheers,
>>
>> — Trustin Lee, http://gleamynode.net/
>>
>> On Sat, Apr 11, 2009 at 3:16 AM, yanky young <yanky.young at gmail.com>
>> wrote:
>> > Hi:
>> >
>> > I am not netty expert yet. I am just trying to give some hints. In your
>> > case, you are actually building a request/response protocol. And
>> request
>> and
>> > response message may include quite complicated headers and body. So you
>> have
>> > to do some message encoding and decoding in both server side and client
>> > side. You can see in netty codebase there are some out-of-box encoder
>> and
>> > decoder in handler.codec package. I suggest you take a look at
>> > example.fractorial package to see how to implement your own encoder and
>> > decoder for your message format which may be xml. If you are not
>> sensitive
>> > to message format, you can also have a look at example.localtime which
>> use
>> > google protobuf library as real encoder and decoder.
>> >
>> > good luck
>> >
>> > yanky
>> >
>> >
>> >
>> > 2009/4/11 manishr22 <manishr22 at gmail.com>
>> >>
>> >> Hi Yanky,
>> >>
>> >> I took the sample code from svn trunk and saw the codes too. Could you
>> >> please let me know which one among given sample code will fit for the
>> >> reference of my requirement.
>> >>
>> >> Regards,
>> >> Manish
>> >>
>> >> Hi:
>> >>
>> >> Of course there are some sample code in netty project. You can just
>> check
>> >> out the svn trunk and see some samples in example package.
>> >>
>> >> good luck
>> >>
>> >> yanky
>> >>
>> >>
>> >> 2009/4/10 manishr22 <manishr22 at gmail.com>
>> >>
>> >> >
>> >> > Hi,
>> >> >
>> >> > I had a problem statement
>> >> >
>> >> > "to write an asynchronous TCP server to which multiple clients will
>> >> > connect
>> >> > and keep sending messages to my tcp server. My server should read
>> the
>> >> > message and send back some acknowledgment information to the client
>> who
>> >> > sent
>> >> > the data. While reading the data at server since the message comes
>> in
>> >> > particular format i have to do some processing before sending the
>> >> > response
>> >> > back to client."
>> >> >
>> >> > say my client is sending a message structure in which it has some
>> header
>> >> > and then in body it has message like :
>> >> >
>> >> > <manish>welcome to the real world</manish>
>> >> >
>> >> > I was on the way to implement NIO but in between i found such a
>> great
>> >> > library netty and thought of using it. i was trying to make use of
>> this
>> >> > library with the given tutorial and examples but i found that
>> tutorial
>> >> > is
>> >> > not good enough to solve the complex problem.
>> >> >
>> >> > If you can provide me some guidance or sample code that how i should
>> >> > solve
>> >> > my problem using netty library, that would be great.
>> >> >
>> >> > Thanks in advance.
>> >> >
>> >> > Regards
>> >> > Manish
>> >> > --
>> >> > View this message in context:
>> >> >
>> >> >
>> http://n2.nabble.com/Code-example-to-write-asynchronous-server-tp2615889p2615889.html
>> >> > Sent from the Netty User Group mailing list archive at Nabble.com.
>> >> >
>> >> > _______________________________________________
>> >> > netty-users mailing list
>> >> > netty-users at lists.jboss.org
>> >> > https://lists.jboss.org/mailman/listinfo/netty-users
>> >> >
>> >>
>> >> _______________________________________________
>> >> netty-users mailing list
>> >> netty-users at lists.jboss.org
>> >> https://lists.jboss.org/mailman/listinfo/netty-users
>> >>
>> >>
>> >>
>> >> --
>> >> View this message in context:
>> >>
>> http://n2.nabble.com/Code-example-to-write-asynchronous-server-tp2615889p2617267.html
>> >> Sent from the Netty User Group mailing list archive at Nabble.com.
>> >>
>> >> _______________________________________________
>> >> netty-users mailing list
>> >> netty-users at lists.jboss.org
>> >> https://lists.jboss.org/mailman/listinfo/netty-users
>> >
>> >
>> > _______________________________________________
>> > netty-users mailing list
>> > netty-users at lists.jboss.org
>> > https://lists.jboss.org/mailman/listinfo/netty-users
>> >
>> >
>>
>> _______________________________________________
>> netty-users mailing list
>> netty-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/netty-users
>>
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://n2.nabble.com/Code-example-to-write-asynchronous-server-tp2615889p2627351.html
>> Sent from the Netty User Group mailing list archive at Nabble.com.
>>
>>
>> _______________________________________________
>> netty-users mailing list
>> netty-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/netty-users
>>
> 
> _______________________________________________
> netty-users mailing list
> netty-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/netty-users
> 
> 

-- 
View this message in context: http://n2.nabble.com/Code-example-to-write-asynchronous-server-tp2615889p3997412.html
Sent from the Netty User Group mailing list archive at Nabble.com.



More information about the netty-users mailing list