Sorry, but Nagle doesn't have anything to do with this...
Nagle is relevant at the *client side* when sending small buffers over the
network.
My client is a simple C# program (not MINA, so SocketConnector is
irrelevant) that sends large buffers (100KB) at each call to Socket.Send()
If Nagle was to blame then I would see the same bandwidth from both server
implementations. This is not the case.


On Tue, Nov 24, 2009 at 8:41 PM, Emmanuel Lecharny <[email protected]>wrote:

> Damn Nagle ! ( http://en.wikipedia.org/wiki/Nagle_algorithm )
>
> Check the FAQ : http://mina.apache.org/faq.html (
>
>
>     Why does SocketConnector send several messages as one message?)
>
>
>
> Zvika Gart wrote:
>
>> Hello,
>> Please help, as this is too strange to be true...
>>
>> I'm comparing two implementations of the most basic socket server - it
>> listens for a client, and after accepting it just starts reading data from
>> it.
>> The first implementation using Java's plain old ServerSocket:
>>
>>        ServerSocket srv = new ServerSocket(80);
>>    Socket s = srv.accept();
>>    InputStream i = s.getInputStream();
>>    byte[] buf = new byte[1024 * 8];
>>    while (true) {
>>     i.read(buf);
>>    }
>>
>> The Second implementation using MINA 1.1.7 (which so simple that I can
>> paste
>> it here):
>>
>> First the Main class:
>>
>> package test;
>>
>> import java.net.InetSocketAddress;
>>
>> import org.apache.mina.common.ByteBuffer;
>> import org.apache.mina.common.IoAcceptor;
>> import org.apache.mina.common.SimpleByteBufferAllocator;
>> import org.apache.mina.transport.socket.nio.SocketAcceptor;
>>
>> public class Main {
>>    public static void main(String[] args) throws Exception {
>>        // The following two lines don't help
>>     ByteBuffer.setUseDirectBuffers(false);
>>        ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
>>
>>        IoAcceptor acceptor = new SocketAcceptor();
>>        acceptor.bind(new InetSocketAddress(80), new MyHandler());
>>    }
>> }
>>
>>
>> And the IoHandler:
>>
>>
>> package test;
>>
>> import org.apache.mina.common.IoHandlerAdapter;
>>
>> public class MyHandler extends IoHandlerAdapter {
>>
>> }
>>
>>
>> I wrote a simple client that connects to the server and pumps continuous
>> data.
>> Both client and server run on Amazon's EC2 on Debian Linux instances
>> (64-bit, Java 1.6). Client is in Europe and server in USA.
>>
>>
>> *The results:*
>> Simple Java implementation - 5 Mbps
>> MINA implementation - 750 Kbps
>>
>> Tried removing the setUseDirectBuffers lines; tried a simpler threading
>> model by running the IoHandler on the IoProcessor threads... nothing helps
>> -
>> MINA is capped at 750 Kbps.
>> What is going on here?!
>>
>>
>>
>
>
> --
> --
> cordialement, regards,
> Emmanuel Lécharny
> www.iktek.com
> directory.apache.org
>
>
>

Reply via email to