How many times is the messageReceived() Method invoked when I send large data?

"이희승 (Trustin Lee)" trustin at gmail.com
Wed Aug 25 22:01:29 EDT 2010


Hi Daniel,

As Bruno commented, you will need a decoder in your pipeline to merge
the received chunks into one, of course assuming that it is safe to do
with the given memory constraint.

If you want Netty to read more than 64KiB for each read, you need to
configure a channel's ReceiveBufferSizePredictorFactory to override the
default maximum (65536).

    bootstrap.setOption(
        "child.receiveBufferSizePredictorFactory",
        new AdaptiveReceiveBufferSizePredictorFactory(...));

Please note that overriding the value will make the stream
fragmentation-free - you still need a decoder, as you did with MINA.

HTH,
Trustin

On 08/26/2010 10:05 AM, sinogermany wrote:
> 
> Hi all,
> 
> I'm quite new to Netty and went through the user guide document. 
> I'm using the Netty 3.2.1 framework to be the basis of my binary protocol.
> But before that I wrote something to test and get familiar with Netty binary
> transport.
> 
> 
> 
> What I concluded is: 
> when I send large data from the client side with one single write() method, 
> the messageReceived method on the server side was invoked more than once.
> It seems the messageReceived method would be invoked for many times.
> How to fix it? I remember MINA has something like
> setMaxDecoderSize(10*1024*1024).
> Does netty got something similar? I believe that.
> 
> 
> 
> Here's some of my code:
> Client Side:
> 
> ChannelFuture cf = client.connect("127.0.0.1", 9999);
> ......
> 
> /**Uploads a local file to the server side*/
> public void uploadBinaryFile(String srcUrl, String destUrl) throws Exception
> {
>     ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
> 
>     byte[] destUrlBytes = destUrl.getBytes("UTF-8");
>     buf.writeInt(destUrlBytes.length);
>     buf.writeBytes(destUrlBytes);
> 
>     byte[] checksum = UtilDigest.getSHA(destUrl);
>     buf.writeInt(checksum.length);
>     buf.writeBytes(checksum);
> 
>     InputStream in = new FileInputStream(srcUrl);
>     int buffer = 2048;
>     byte[] bytes = new byte[buffer];
>     int bytesRead;
>     while( (bytesRead = in.read(bytes, 0, buffer)) > 0 ){
>         buf.writeBytes(bytes, 0, bytesRead);
>     }
>     cf.getChannel().write(buf); //I debugged the new buf Object, about 4 MB.
> }
> 
> 
> 
> 
> 
> 
> Server side:
> 
> static int count = 0;
> 
> @Override
> public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
>     ChannelBuffer buf = (ChannelBuffer) e.getMessage();
>     System.out.println("Received " + (++count) + " messages.");
>     System.out.println("Message length: " + buf.readableBytes());
> }
> 
> 
> 
> 
> my server side output was:
> Received 1 messages.
> Message length: 1024
> Received 2 messages.
> Message length: 2048
> Received 3 messages.
> Message length: 2048
> Received 4 messages.
> Message length: 3072
> Received 5 messages.
> Message length: 4096
> Received 6 messages.
> Message length: 6144
> Received 7 messages.
> Message length: 8192
> Received 8 messages.
> Message length: 12288
> Received 9 messages.
> Message length: 16384
> Received 10 messages.
> Message length: 24576
> Received 11 messages.
> Message length: 32768
> Received 12 messages.
> Message length: 49152
> Received 13 messages.
> Message length: 65536
> Received 14 messages.
> Message length: 34012
> Received 15 messages.
> Message length: 38800
> Received 16 messages.
> Message length: 31280
> Received 17 messages.
> Message length: 65536
> Received 18 messages.
> Message length: 65536
> Received 19 messages.
> Message length: 47048
> Received 20 messages.
> Message length: 35040
> Received 21 messages.
> Message length: 52560
> Received 22 messages.
> Message length: 35040
> Received 23 messages.
> Message length: 38800
> Received 24 messages.
> Message length: 31280
> Received 25 messages.
> Message length: 35040
> Received 26 messages.
> Message length: 35040
> Received 27 messages.
> Message length: 35040
> Received 28 messages.
> Message length: 35040
> Received 29 messages.
> Message length: 65536
> Received 30 messages.
> Message length: 57104
> Received 31 messages.
> Message length: 65536
> Received 32 messages.
> Message length: 65536
> Received 33 messages.
> Message length: 65536
> Received 34 messages.
> Message length: 31152
> Received 35 messages.
> Message length: 35040
> Received 36 messages.
> Message length: 35040
> Received 37 messages.
> Message length: 35040
> Received 38 messages.
> Message length: 17520
> Received 39 messages.
> Message length: 35040
> Received 40 messages.
> Message length: 35040
> Received 41 messages.
> Message length: 35040
> Received 42 messages.
> Message length: 35040
> Received 43 messages.
> Message length: 35040
> Received 44 messages.
> Message length: 52560
> Received 45 messages.
> Message length: 35040
> Received 46 messages.
> Message length: 65536
> Received 47 messages.
> Message length: 42504
> Received 48 messages.
> Message length: 65536
> Received 49 messages.
> Message length: 65536
> Received 50 messages.
> Message length: 29528
> Received 51 messages.
> Message length: 38800
> Received 52 messages.
> Message length: 35040
> Received 53 messages.
> Message length: 31280
> Received 54 messages.
> Message length: 52560
> Received 55 messages.
> Message length: 65536
> Received 56 messages.
> Message length: 65536
> Received 57 messages.
> Message length: 29528
> Received 58 messages.
> Message length: 52560
> Received 59 messages.
> Message length: 52560
> Received 60 messages.
> Message length: 35040
> Received 61 messages.
> Message length: 52560
> Received 62 messages.
> Message length: 35040
> Received 63 messages.
> Message length: 35040
> Received 64 messages.
> Message length: 35040
> Received 65 messages.
> Message length: 35040
> Received 66 messages.
> Message length: 65536
> Received 67 messages.
> Message length: 65536
> Received 68 messages.
> Message length: 29528
> Received 69 messages.
> Message length: 35040
> Received 70 messages.
> Message length: 35040
> Received 71 messages.
> Message length: 35040
> Received 72 messages.
> Message length: 65536
> Received 73 messages.
> Message length: 65536
> Received 74 messages.
> Message length: 26608
> Received 75 messages.
> Message length: 35040
> Received 76 messages.
> Message length: 65536
> Received 77 messages.
> Message length: 60024
> Received 78 messages.
> Message length: 52560
> Received 79 messages.
> Message length: 52560
> Received 80 messages.
> Message length: 65536
> Received 81 messages.
> Message length: 24984
> Received 82 messages.
> Message length: 35040
> Received 83 messages.
> Message length: 35040
> Received 84 messages.
> Message length: 35040
> Received 85 messages.
> Message length: 52560
> Received 86 messages.
> Message length: 52560
> Received 87 messages.
> Message length: 38800
> Received 88 messages.
> Message length: 31280
> Received 89 messages.
> Message length: 52560
> Received 90 messages.
> Message length: 35040
> Received 91 messages.
> Message length: 38800
> Received 92 messages.
> Message length: 31280
> Received 93 messages.
> Message length: 65536
> Received 94 messages.
> Message length: 24984
> Received 95 messages.
> Message length: 32120
> Received 96 messages.
> Message length: 35040
> Received 97 messages.
> Message length: 35040
> Received 98 messages.
> Message length: 35040
> Received 99 messages.
> Message length: 35040
> Received 100 messages.
> Message length: 52560
> Received 101 messages.
> Message length: 38800
> Received 102 messages.
> Message length: 65536
> Received 103 messages.
> Message length: 35824
> Received 104 messages.
> Message length: 35040
> Received 105 messages.
> Message length: 35040
> Received 106 messages.
> Message length: 38800
> Received 107 messages.
> Message length: 31280
> Received 108 messages.
> Message length: 65536
> Received 109 messages.
> Message length: 24984
> Received 110 messages.
> Message length: 65536
> Received 111 messages.
> Message length: 65536
> Received 112 messages.
> Message length: 65536
> Received 113 messages.
> Message length: 65536
> Received 114 messages.
> Message length: 39456
> Received 115 messages.
> Message length: 31280
> Received 116 messages.
> Message length: 52560
> Received 117 messages.
> Message length: 35040
> Received 118 messages.
> Message length: 26315
> 
> 
> I don't quite understand. Is this a fragation problem? 
> Any suggestions for transporting large binary data?
> 
> Thanks a lot for your help!
> 
> Daniel

-- 
what we call human nature in actuality is human habit
http://gleamynode.net/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 293 bytes
Desc: OpenPGP digital signature
Url : http://lists.jboss.org/pipermail/netty-users/attachments/20100826/5822e5a0/attachment.bin 


More information about the netty-users mailing list