Hello,

I agree, but in that case I will be able to have a reference to who to send
back the request but it still doesn't solve the issue of synchronization.
The issue as I stated is that only one client can access the serial port
channel (serial connector) but many petitions can come to HTTP server side.
I need to make those requests wait somehow and execute on the serial client
side one by one.



Hu, Mei Mei wrote:
> 
> I'm not quite understand the detail. However, if you put a message into
> some queue after receiving a message, you can wrap the message along with
> the session into 1 object and put that obj in the queue.
> 
> 
> 
> 
> 
> -----Original Message-----
> From: Vanja Ozegovic [mailto:[email protected]]
> Sent: Thursday, September 08, 2011 10:37 AM
> To: [email protected]
> Subject: Re: Proxy HTTP-Serial
> 
> 
> Hello everyone,
> 
> I worked out this problem so I will post my experience in case someone
> else
> has a similar issue.
> 
> As I stated before, I thought first about using queues for incoming
> requests. This wouldn't solve my synchronization issues, because at the
> end,
> I needed to simulate synchronous communication through all the layers (the
> same request received on HTTP server side has to be forwarded to Serial
> port
> client and vice-versa with the response). That meant that if I put a
> message
> into some queue I wouldn't know to who to send the response (or at least
> it
> would be quite more complicated).
> 
> The other approach of using semaphores/critical sections worked but not as
> I
> imagined in the beginning.
> 
> To be able to provide a "real" synchronization on both events
> (messageReceived and sessionOpened), I needed to "group" these somehow.
> What
> I ended up using is customized approach. I took the idea from HTTP Server
> implementation example (streaming case) and created my own thread which
> will
> start every time a message is received on HTTP Server side.
> 
> In this thread the connection to serial port is established and listener
> for
> "connect" method is created. Only when OperationComplete is invoked
> (connection is established), the message is sent from HTTP Server side to
> the Serial port side (serial port session). I tried using synchronizing
> run() method but this approach always blocked the second thread (second
> client) and didn't work well. In stead of that at the end, inside the
> run()
> method, I used semaphores (semaph.acquireUninterruptibly();) which solves
> the problem correctly. Semaphore is released on the serial port handler
> side
> when the response is sent back.
> 
> The downside is that all the incoming requests for the HTTP server side
> are
> mapped to threads and these are maintained in the memory until their
> execution is finished (few seconds per thread in my testing environment).
> This is the only solution I found without denegating the service to the
> clients.
> 
> Best Regards,
> Vanja Ozegovic
> 
> 
> Vanja Ozegovic wrote:
>>
>> Hello everyone,
>>
>> I'm new in this mailing list; my name is Vanja Ozegovic and I'm currently
>> getting to know Apache Mina. I have read the tutorials, documentation and
>> the code, and have been working with the framework for couple of months.
>>
>> The problem I am facing is as follows. I created a proxy server in Apache
>> Mina, following the logic in Proxy Example. On the server side I have an
>> HTTP server (also following modified HTTP server logic) and on the client
>> side I have a Serial Port Connector.
>>
>> The main requirement is to be able to process petitions from thousands
>> HTTP
>> clients simultaneously. I am aware that this is not possible on the
>> serial
>> port side since the access to the serial port is exclusive (one client at
>> a
>> moment). My question is what would be the correct approach for
>> synchronization in this case?
>>
>> I was considering to create a request queue on the server side, to allow
>> only one petition to be forwarded to the Serial Port Connector at a given
>> moment but this doesn't seem quite correct. I also though about using
>> semaphores but this doesn't seem to be right neither since I need to
>> restrict access for obtaining the serial port session and also to
>> restrict
>> the writing the messages to the serial port session (in sessionOpened and
>> messageReceived methods respectively).  Is there any other approach?
>>
>> I haven't work that deeply with event driven approach, so if anyone can
>> provide my a hint on this problem, I would be very grateful.
>>
>> Best Regards,
>> V. Ozegovic
>>
>>
> 
> --
> View this message in context:
> http://old.nabble.com/Proxy-HTTP-Serial-tp32386348p32424100.html
> Sent from the Apache MINA User Forum mailing list archive at Nabble.com.
> 
> 
> 


-----
Best Regards,
Vanja Ozegovic
-- 
View this message in context: 
http://old.nabble.com/Proxy-HTTP-Serial-tp32386348p32426020.html
Sent from the Apache MINA User Forum mailing list archive at Nabble.com.

Reply via email to