Echo example explaination

Christian Migowski chrismfwrd at gmail.com
Fri Sep 4 03:54:30 EDT 2009


On Fri, Sep 4, 2009 at 5:05 AM, 이희승<trustin at gmail.com> wrote:
> I've just split the EchoHandler into EchoClientHandler and
> EchoServerHandler.  It should be easier to understand now. :)
>
>  EchoClientHandler - http://tinyurl.com/kr5l8a
>  EchoServerHandler - http://tinyurl.com/mxh2d5
>
> What do you think?

too easy ;)
Seriously, that is really better understandable for beginners.

BTW, I personally liked your first approach better because I try to
use the same handler for clients and servers in my projects.
You could have removed the channelConnected() method and its sending
of the firstMessage alltogether and have sent the firstMessage
directly from EchoClient, but I guess this is just a matter of
personal style (or bad practice ;))

regards,
christian!

>
> Trustin
>
> On Tue, 1 Sep 2009 14:05:05 +0900 (KST)
> 이희승 (Trustin Lee) <trustin at gmail.com> wrote:
>> Indeed, this example is too tricky for a beginner to understand.  I
>> need to separate server-side handler and client-side handler.
>>
>> Trustin
>>
>> On Tue, 1 Sep 2009 13:26:57 +0900 (KST)
>> "J. Mi" <jmi258 at gmail.com> wrote:
>> > Hi Christian,
>> >
>> > Thanks! I got it. They echo each other just like "wild ping-pong". I
>> > like that.
>> >
>> > Cheers,
>> > Jason
>> >
>> > On Mon, Aug 31, 2009 at 8:24 AM, Christian Migowski
>> > <chrismfwrd at gmail.com>wrote:
>> >
>> > > Hi Jason,
>> > >
>> > > i'll try to comment the example, hope it helps:
>> > >
>> > > 1. in EchoClient.java line 63 an instance of EchoHandler.java
>> > > firstMessage is initialized with numbers because the 2nd
>> > > constructor is used
>> > > 2. in EchoServer.java an instance of EchoHandler.java firstMessage
>> > > is initialized as empty (i.e. no data) because the 1st constructor
>> > > is used
>> > > 3. in EchoClient.java line 67 the client connects to the server,
>> > > when this is done, channelConnected() method of EchoHandler is
>> > > invoked in both the client and the server, but with different
>> > > processing: 3a) EchoHandler.channelConnected of EchoClient will
>> > > send firstMessage that is initialized with numbers
>> > > 3b)  EchoHandler.channelConnected of EchoServer will not send
>> > > anything because firstMessage is empty (there is nothing to send,
>> > > even IF write is called)
>> > > 4. Echohandler.messageReceived of EchoServer is invoked because it
>> > > received the message from the client, in this method the data
>> > > received is echoed back to the client
>> > > 5. now Echohandler.messageReceived of EchoClient is doing the same
>> > > as the one of EchoServer in 4.) and the wild ping-pong begins
>> > > until you terminate the program
>> > >
>> > > hope this helps,
>> > > greetings,
>> > > christian!
>> > >
>> > >
>> > > On Sat, Aug 29, 2009 at 12:54 AM, J. Mi<jmi258 at gmail.com> wrote:
>> > > > Hi Trustin or any other experienced Netty user,
>> > > >
>> > > > I've downloaded Netty 3.1.2. GA and am currently trying to learn
>> > > > it via
>> > > your
>> > > > example of Echo. But I'm having a hard time understanding the
>> > > > example. I started the server first and seeing a bunch of "0.000
>> > > > MiB/s" output to
>> > > the
>> > > > console.
>> > > >
>> > > > I then started the client with the same port (as hard-coded in
>> > > > the
>> > > server)
>> > > > of 8080. I then see the output to the console as a bunch "0.0nn
>> > > > MiB/s"
>> > > where
>> > > > nn can be any number.
>> > > >
>> > > > I understand that the outout is from the thread
>> > > > ThroughputMonitor.
>> > > >
>> > > > I'm not sure if I understand the scenario how things work
>> > > > between the
>> > > client
>> > > > and the server.
>> > > > The brief description from EchoClient.java is "Sends one message
>> > > > when a connection is open and echoes back any received data to
>> > > > the server." The brief description from EchoServer.java is
>> > > > "Echoes back any received
>> > > data
>> > > > from a client."
>> > > > The EchoHandler.java has the method below:
>> > > >
>> > > > public void channelConnected (ChannelHandlerContext ctx,
>> > > ChannelStateEvent
>> > > > e) {
>> > > >
>> > > > // Send the first message. Server will not send anything here
>> > > >
>> > > > // because the firstMessage's capacity is 0.
>> > > >
>> > > > e.getChannel().write(
>> > > >
>> > > > firstMessage);
>> > > >
>> > > > }
>> > > >
>> > > > So between the client and the server, who sends a message and
>> > > > who echoes
>> > > the
>> > > > message?
>> > > > When I added System.out
>> > > > .println("Message from channelConnected: " +
>> > > > firstMessage.toString()); in the method, I can see
>> > > >
>> > > > Message from channelConnected:
>> > > > BigEndianHeapChannelBuffer(ridx=0, widx=0, cap=0)
>> > > >
>> > > > once when starting EchoClient.
>> > > >
>> > > > Could you please explain it to me? This example is a fundamental
>> > > > one. It should be good starting point for me to understand
>> > > > Netty's NIO framework.
>> > > >
>> > > > If there is a forum some where about this topic and where I
>> > > > should post
>> > > any
>> > > > question like this, please advice as well.
>> > > >
>> > > > Thanks in advance
>> > > > Jason
>> > > > _______________________________________________
>> > > > netty-dev mailing list
>> > > > netty-dev at lists.jboss.org
>> > > > https://lists.jboss.org/mailman/listinfo/netty-dev
>> > > >
>> > > >
>> > >
>> > > _______________________________________________
>> > > netty-dev mailing list
>> > > netty-dev at lists.jboss.org
>> > > https://lists.jboss.org/mailman/listinfo/netty-dev
>> > >
>>
>>
>>
>
>
>
> --
> Trustin Lee, http://gleamynode.net/
>
> _______________________________________________
> netty-dev mailing list
> netty-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/netty-dev
>



More information about the netty-dev mailing list