Structured message reading problem in Netty.
Trustin Lee
trustin at gmail.com
Wed Apr 29 11:32:10 EDT 2009
Hi Manish,
Could you paste your decoder implementation and pipeline setup?
Thanks in advance,
Trustin
manishr22 wrote:
>
> Hi Trustin,
>
> One small question:
>
> When I am doing the implementation the way you said like adding
> ReplayDeocder, if i run whatever be the number of client with number of
> messages from each, I see the first message from client read correctly but
> from second message the header length and message lengh data read
> incorrectly and then application crashes.
>
> Though i tested my application with the use of
> "DelimiterBasedFrameDecoder" i see for all client i get correct data.
> Since the string based delimiter in serialization and de-serialization
> from string to byte and then int gives incorrect result.
>
> So i should be following the approach of ReplayingDecoder only but due to
> above given problem i am facing issue.
> In replayingDecoder i tried with the method checkPoint() too. I think
> everytime when data is read from channelBuffer the readerIndex() value
> increase. so checkpoint() here shouldn't be necessary. Though i am
> compromising with the performance for sometime so that same data get read
> again and again for the time being.
>
> IF first message read correctly it should happen for rest messages too.
>
> i have tried for @ChannelPipelineCoverage("all") and
> @ChannelPipelineCoverage("one") both. but the problem is same.
>
> Any suggestion?
>
> Regards
> Manish Ranjan
>
> manishr22 wrote:
>>
>> Hi Trustin,
>>
>> Thanks for your guidance. This should help me out to solve my problem.
>> You people of created a great library, just more of documentation and
>> example will help any developer a lot to use Netty.
>>
>> Regards
>> Manish
>>
>>
>> Trustin Lee-2 wrote:
>>>
>>> Hi Manish,
>>>
>>> I hope you are not discouraged by previous comment.
>>>
>>> I'd like to recommend you to use ReplayingDecoder in this case.
>>>
>>> public class MyDecoder extends ReplayingDecode<VoidEnum> {
>>> @Override
>>> protected Object decode(..., buf, ...) {
>>> int messageLength = buf.readInt();
>>> int headerLength = buf.readInt();
>>> return buf.readBytes(messageLength + headerLength);
>>> }
>>> }
>>>
>>> Than the handler placed after 'MyDecoder' will get a ChannelBuffer
>>> with expected length. For example, if a message whose messageLength
>>> is 10 and headerLength is 6, you will get a ChannelBuffer whose
>>> readable bytes are 4 + 4 + 6 + 10.
>>>
>>> Let me know if you have more questions. :)
>>>
>>> HTH,
>>>
>>> — Trustin Lee, http://gleamynode.net/
>>>
>>> On Fri, Apr 24, 2009 at 2:16 PM, manishr22 <manishr22 at gmail.com> wrote:
>>>>
>>>> Hi Trustin,
>>>>
>>>> Sorry to bug you guys much.
>>>>
>>>> I did read the explanation about FrameDecoder and did the earlier
>>>> implementation using the same. In my earlier post i gave those source
>>>> code
>>>> too. Since that was also having problem in buffer's capacity() and
>>>> resetReaderIndex().
>>>>
>>>> I am sorry to give an impression like i wanted to get my code fixed by
>>>> someone else, but i never had this intention, i only wanted to get the
>>>> advice and opinion from Netty expert, since i was learning this.
>>>>
>>>> Regards
>>>> Manish
>>>>
>>>> Trustin Lee-2 wrote:
>>>>>
>>>>> Hi Manish,
>>>>>
>>>>> Looking from your code, you don't have a FrameDecoder or
>>>>> ReplayingDecoder in a pipeline, which means you have a good chance to
>>>>> receive only partial data, which leads to IndexOutOfBoundsException.
>>>>> Did you have a chance to read the first chapter of the user guide?
>>>>> There's good amount of explanation about this issue there.
>>>>>
>>>>> You and other community members have exchanged quite a lot of
>>>>> questions and answers so far. My impression so far is that you just
>>>>> want people to fix your code. We could solve your problem just by
>>>>> writing the fixed code for you, but it would be much better for you to
>>>>> follow all the step demonstrated in the user guide. Then you will
>>>>> know what is wrong with your current code very easily.
>>>>>
>>>>> Also, you might find the factorial example more useful than the
>>>>> discard example for your case.
>>>>>
>>>>> — Trustin Lee, http://gleamynode.net/
>>>>>
>>>>> On Thu, Apr 23, 2009 at 8:45 PM, manishr22 <manishr22 at gmail.com>
>>>>> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I am new to netty and tried writing netty-server as per my
>>>>>> requirement
>>>>>> seeing various examples. But i am not getting the result correctly.
>>>>>>
>>>>>>
>>>>>> I am trying to write a netty server that can read the that will read
>>>>>> the
>>>>>> message-structre from normal synchronous multi-threaded client ( say
>>>>>> 10
>>>>>> client is sending 1000 messages each ) to the server.
>>>>>>
>>>>>>
>>>>>> By message structure i mean my client is sending the message in the
>>>>>> format :
>>>>>>
>>>>>>
>>>>>> [MESSAGE 1-CLIENT 1] message-length(first 4 byte) header
>>>>>> length(next 4
>>>>>> byte) data (including
>>>>>>
>>>>>> header and body as specified bytes of message length and header
>>>>>> length)
>>>>>>
>>>>>>
>>>>>> [MESSAGE 2-CLIENT 1] message-length(first 4 byte) header
>>>>>> length(next 4
>>>>>> byte) data (including
>>>>>>
>>>>>> header and body as specified bytes of message length and header
>>>>>> length)
>>>>>>
>>>>>>
>>>>>> ........
>>>>>>
>>>>>> ........
>>>>>>
>>>>>> [MESSAGE 1-CLIENT 2] message-length(first 4 byte) header
>>>>>> length(next 4
>>>>>> byte) data (including
>>>>>>
>>>>>> header and body as specified bytes of message length and header
>>>>>> length)
>>>>>>
>>>>>>
>>>>>> [MESSAGE 2-CLIENT 2] message-length(first 4 byte) header
>>>>>> length(next 4
>>>>>> byte) data (including
>>>>>>
>>>>>> header and body as specified bytes of message length and header
>>>>>> length)
>>>>>>
>>>>>> ....
>>>>>> .....
>>>>>>
>>>>>> [For N number of client and N
>>>>>> http://n2.nabble.com/file/n2682454/netty.zip
>>>>>> netty.zip number of messages]
>>>>>>
>>>>>> and now my netty server should read all the different messages from
>>>>>> client/s
>>>>>> and do the proper message parsing and do some business operation.
>>>>>>
>>>>>>
>>>>>> How i can implement the reading of message-structure using netty.
>>>>>>
>>>>>>
>>>>>> I saw several example and implemented something in it. but its not
>>>>>> giving
>>>>>> the appropriate result rather i am getting exception all the time.
>>>>>>
>>>>>> The basic source code which i tried for this is also attached for
>>>>>> reference.
>>>>>>
>>>>>> Any suggestion and help with some sample code will be really
>>>>>> appreciated.
>>>>>>
>>>>>>
>>>>>> Regards
>>>>>>
>>>>>> Manish
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> View this message in context:
>>>>>> http://n2.nabble.com/Structured-message-reading-problem-in-Netty.-tp2682454p2682454.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/Structured-message-reading-problem-in-Netty.-tp2682454p2689756.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
>>>
>>>
>>
>>
>
>
-----
Trustin Lee, Principal Software Engineer, JBoss, a division of Red Hat
--
what we call human nature is actually human habit
--
http://gleamynode.net/
--
View this message in context: http://n2.nabble.com/Structured-message-reading-problem-in-Netty.-tp2682454p2741285.html
Sent from the Netty User Group mailing list archive at Nabble.com.
More information about the netty-users
mailing list