[
https://issues.apache.org/jira/browse/DIRMINA-789?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12878557#action_12878557
]
Emmanuel Lecharny commented on DIRMINA-789:
-------------------------------------------
As I sai, unless you manage the write completion with the MessageSent event,
there is no way you can do it using the WriteFuture.
Also note that modifying the API to get a blocking WriteFuture until the data
is read by the client defeats the API purpose, as you first break the SEDA
principle, plus you may kill the server if the client is slow to read the data,
as you will block a thread waiting for the write to be done : you don't have
thousands of threads available.
Just waiting for the messageSent event to pus the next block of data is
certainly the best solution :
- you can free the thread as nothing will be done untill the event occurs
- you don't suck a lot of memory in MINA
- it's event driven, so you don't have to be blocking.
I understand that when you come from a Blocking IO kind of system, this is a
bit unusual, and I myself spent some time to get used to an event driven IO
sysem, but once you see how it works, it's quite easy to manipulate. It's just
a paradigm shift, IMO.
> Possible Deadlock/Out of memory when sending large amounts of data using Nio
> ----------------------------------------------------------------------------
>
> Key: DIRMINA-789
> URL: https://issues.apache.org/jira/browse/DIRMINA-789
> Project: MINA
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.0.0-RC1
> Environment: Windows Vista 64-bit Java 5 and Java 6
> Reporter: Sai Pullabhotla
> Attachments: MinaClient.java, RandomDataServer.java
>
>
> This is a followup to the post on the DEV mailing list,
> http://old.nabble.com/Help-needed-with-OutOfMemory-error-and-or-GC-Issues-Dead-Locks-td28849756.html.
>
> I've even simplified the test cases so now it just has one simple NioServer,
> and an NioClient. The MinaClient class creates 5 concurrent connections to
> the RandomDataServer. Upon a successful connection, the server is setup to
> send 500MB worth of random text data. The MinaClient just saves the received
> data to a temp file in the working directory. When I run this code with small
> amounts of data, it works fine, but with 500MB, I did not have success yet.
> Some times, I get OOM on the server. Some times, nothing happens.
> I've declared several constants in each class that you could change to try
> various settings such as changing the amount of data served by the server,
> whether or not to use an executor filter/IoEventThrottle etc.
> Both classes have main methods, and I was running them as stand alone
> applications on the same PC.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.