users@grizzly.java.net

Re: who can help me?how a server base grizzly receive 2MB data from client

From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
Date: Wed, 30 Jan 2008 21:39:20 -0500

Salut,

windshome wrote:
>
> I process the data to make a digital signature, and return signed data to
> client.

Interesting :-) The number of ByteBuffer created is equal to the number
of active Threads by default in Grizzly. Right now our default thread
pool doesn't purge inactive threads, so it may or may not be a problem
if you need a lot of threads. You might want to replace the default
thread pool with a one from java.util.concurrent.* that can purge
inactive thread and their associated byte buffer.

Are you able to determine the size of your expected traffic? If your VM
is properly tuned (I will let Charlie gives some hints in case you are
interested) it shouldn't be a problem, assuming you don't need 1000
threads :-)

A+

-- Jeanfrancois


>
>
> Jeanfrancois Arcand-2 wrote:
>> Hi,
>>
>> sorry for the delay...
>>
>> windshome wrote:
>>> I write a server base grizzly,I write a client which send data to server
>>> and
>>> receive response from server. I send 50 bytes data and 2k data to server
>>> ok,but when I send 20K and 2MB data,server no response.
>>> I view the code of grizzly,find the ByteBuffer of a workthread capity is
>>> 8192,then I modify it to 81920,then 20k data can receive by server.
>>>
>>> If my Server set the init size of ByteBuffer is 81920,I think it would
>>> use
>>> to much memory,who can tell me some method,will dynamic just the
>>> buffer,can
>>> receive some bytes data ,or some MB data?
>> What are you doing with the bytes? Are you saving the bytes somewhere on
>> disk/db (freeing your memory) or you must keep them in memory?
>>
>> Thanks
>>
>> -- Jeanfrancois
>>
>>
>>>
>>>
>>> My Server's protocol parser code :
>>>
>>>
>>> final ProtocolFilter parserProtocolFilter = new
>>> ParserProtocolFilter() {
>>> public ProtocolParser newProtocolParser() {
>>> return new ProtocolParser() {
>>> private boolean isExpectingMoreData = false;
>>> private ByteBuffer byteBuffer;
>>> private Request message;
>>>
>>> public boolean hasMoreBytesToParse() {
>>> return false;
>>> }
>>>
>>> public boolean isExpectingMoreData() {
>>> return isExpectingMoreData;
>>> }
>>>
>>> public Object getNextMessage() {
>>> return message;
>>> }
>>>
>>> public boolean hasNextMessage() {
>>>
>>>
>>> ByteBuffer dup = byteBuffer.duplicate();
>>> System.out.println( "byteBuffer.position2()=" +
>>> byteBuffer.position() );
>>> if (byteBuffer.position() == 0){
>>> System.out.println("byteBuffer.position() ==
>>> 0");
>>> isExpectingMoreData = true;
>>> return false;
>>> }
>>> dup.flip();
>>>
>>>
>>> if( dup.remaining()< 4 ){
>>> isExpectingMoreData = true;
>>> return false;
>>> }
>>>
>>> byte[] bs = new byte[4];
>>> dup.get(bs);
>>> int len= (bs[0] << 24) + (bs[1] << 16) + (bs[2]
>>> <<
>>> 8) + (bs[3] << 0);
>>>
>>> if( dup.remaining() < len ){
>>> isExpectingMoreData = true;
>>> return false;
>>> }
>>> byte[] data = new byte[len];
>>> dup.get( data );
>>>
>>> try {
>>> message = new ByteRequest(data);
>>> } catch (Exception e) {
>>> e.printStackTrace();
>>> message=null;
>>> return false;
>>> }
>>> return true;
>>>
>>> }
>>>
>>> public void startBuffer(ByteBuffer bb) {
>>> byteBuffer = bb;
>>> }
>>>
>>> public boolean releaseBuffer() {
>>> byteBuffer = null;
>>> message = null;
>>> return false;
>>> }
>>>
>>> };
>>> }
>>> };
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
>> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>>
>>
>>
>