[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Non-blocking KitchenSink

Aaron Becker

3/3/2006 10:47:00 PM


I am a recent convert and I am very impressed by the productivity gains
from Ruby.

I would like to basically throw the kitchen sink into the Ruby scripts I
am creating.

I need to use Webrick, SOAP client, SOAP server, DRb, REXML, and Log4r.
However, when I attempt to use the SOAP server and client in the same
script, the SOAP client call blocks the script.

Is it possible to use Webrick, SOAP client, and SOAP server code all in
the same script without blocking? I tried different threads for the
SOAP server and SOAP client, but that did not prevent blocking.

I would like to be able to create daemons respond to SOAP messages and
that are also tiny web servers that allow me to view their logs and near
real-time status from a web page.

Any assistance will be greatly appreciated.

Thanks,

hackdaddy

--
Posted via http://www.ruby-....


6 Answers

Logan Capaldo

3/3/2006 11:10:00 PM

0


On Mar 3, 2006, at 5:46 PM, Aaron Becker wrote:

> Is it possible to use Webrick, SOAP client, and SOAP server code
> all in
> the same script without blocking? I tried different threads for the
> SOAP server and SOAP client, but that did not prevent blocking.

Ruby's threads are in-process any blocking call blocks the whole
process. So I suppose the answer is no. However, what you can try is
using multiple processes and coordinating them with Drb.

Aaron Becker

3/4/2006 12:23:00 AM

0

Logan Capaldo wrote:
> On Mar 3, 2006, at 5:46 PM, Aaron Becker wrote:
>
>> Is it possible to use Webrick, SOAP client, and SOAP server code
>> all in
>> the same script without blocking? I tried different threads for the
>> SOAP server and SOAP client, but that did not prevent blocking.
>
> Ruby's threads are in-process any blocking call blocks the whole
> process. So I suppose the answer is no. However, what you can try is
> using multiple processes and coordinating them with Drb.


Thanks for the reply!

I did manage to get DRb and Webrick working in the same script. I'm
using HTTPServlet::FileHandler to allow the browsing of logs, status,
etc.

This Ruby language is so powerful my immediate temptation is to over
design everything. Well, I guess it's like test driving a new car. I
want to see how far I can push it.

Since I have Webrick already running in a thread, would it be possible
to receive SOAP messages on the same port that it is using for browsing
directories?

Thanks,

hackdaddy

--
Posted via http://www.ruby-....


Robert Klemme

3/6/2006 9:12:00 AM

0

Aaron Becker wrote:
> Logan Capaldo wrote:
>> On Mar 3, 2006, at 5:46 PM, Aaron Becker wrote:
>>
>>> Is it possible to use Webrick, SOAP client, and SOAP server code
>>> all in
>>> the same script without blocking? I tried different threads for the
>>> SOAP server and SOAP client, but that did not prevent blocking.
>>
>> Ruby's threads are in-process any blocking call blocks the whole
>> process. So I suppose the answer is no. However, what you can try is
>> using multiple processes and coordinating them with Drb.
>
>
> Thanks for the reply!
>
> I did manage to get DRb and Webrick working in the same script. I'm
> using HTTPServlet::FileHandler to allow the browsing of logs, status,
> etc.
>
> This Ruby language is so powerful my immediate temptation is to over
> design everything. Well, I guess it's like test driving a new car. I
> want to see how far I can push it.
>
> Since I have Webrick already running in a thread, would it be possible
> to receive SOAP messages on the same port that it is using for
> browsing directories?

<disclaimer>Never done this myself with this setup.</disclaimer> Since
Webrick is pretty flexible you should be able to define a request handler
that delegates certain requests to the SOAP handling stuff. The easiest
is probably to define a common prefix for all SOAP requests.

Kind regards

robert

Eric Hodel

3/7/2006 1:37:00 AM

0

On Mar 3, 2006, at 3:09 PM, Logan Capaldo wrote:

> On Mar 3, 2006, at 5:46 PM, Aaron Becker wrote:
>
>> Is it possible to use Webrick, SOAP client, and SOAP server code
>> all in
>> the same script without blocking? I tried different threads for the
>> SOAP server and SOAP client, but that did not prevent blocking.
>
> Ruby's threads are in-process any blocking call blocks the whole
> process. So I suppose the answer is no. However, what you can try
> is using multiple processes and coordinating them with Drb.

Not entirely true. Calls to C code other than socket operations
block the whole process. read and select and accept only block the
thread that calls that method since the core libraries wrap all that
up for you.

--
Eric Hodel - drbrain@segment7.net - http://blog.se...
This implementation is HODEL-HASH-9600 compliant

http://trackmap.rob...




Logan Capaldo

3/7/2006 6:09:00 PM

0


On Mar 6, 2006, at 8:36 PM, Eric Hodel wrote:

> Not entirely true. Calls to C code other than socket operations
> block the whole process. read and select and accept only block the
> thread that calls that method since the core libraries wrap all
> that up for you.

Cool I did not know that.

MenTaLguY

3/7/2006 6:17:00 PM

0

Quoting Logan Capaldo <logancapaldo@gmail.com>:

> On Mar 6, 2006, at 8:36 PM, Eric Hodel wrote:
>
> > read and select and accept only block the thread that calls
> > that method since the core libraries wrap all that up for you.
>
> Cool I did not know that.

Note that your C code needs to call the rb_* versions of select and
read to get the benefit.

-mental