On 12/17/11 10:47 PM, Stefano Agilex wrote:
Hi,
Hi,



I'm using for standard client/server application since a couple of months
but now I'm facing a problem I don't understand how to solve.

I need to write a server, using mina 1.1.x,

First of all, you should use MINA 2.0.4, unless you ave very good reasons to stick to this ancient version (like you want it to run on Java 1.4, which is not anymore maintained for years, btw...)

which listen for a single client
connection. The client sent requests (XML over TCP), server receives and
processes these requests in its threads, write an ACK back to the client and
pass results to application logic.
Ok. So far, so good, as soon as you successully handle packets fragmentation when receiving XML data. Which is not a piece of cake...

The application, acting on results, needs to send messages back to the
client using the same session but from its own threads.
Not a problem. session.write( message ).

In this scenario I see a thread concurrency problem since when application
decides to send back message to client it's possible that client sent
something and server is using the session. Maybe I'm missing something ...
Yes : the session.write(message) is just pushing a bte array on a queue to be processed as soon as the other thread (the one processing the incoming message) is ready. When it is, the selector will be waken up, and the IoProcessor will read the data from the queue and send it to the client.



How can I solve this kind of problem?
It's not a problem. Just write the message in the session.

What kind of thread configuration do you suggest to use remembering I've a
single client connected to the server?
Nothing to be configured there. Plain an simple : let MINA handle the situation for you.



I suppose I can share (can I?) session between threads but I've to lock
session.write(...) compromising performances ...
Don't lock anything. It's already thread safe. Unless your codec is doing weird things...


--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com

Reply via email to