Non-blocking KitchenSink

Discussion in 'Ruby' started by Aaron Becker, Mar 3, 2006.

  1. Aaron Becker

    Aaron Becker Guest

    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-forum.com/.
     
    Aaron Becker, Mar 3, 2006
    #1
    1. Advertising

  2. --Apple-Mail-18--88582336
    Content-Transfer-Encoding: 7bit
    Content-Type: text/plain;
    charset=US-ASCII;
    delsp=yes;
    format=flowed


    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.
    --Apple-Mail-18--88582336--
     
    Logan Capaldo, Mar 3, 2006
    #2
    1. Advertising

  3. Aaron Becker

    Aaron Becker Guest

    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-forum.com/.
     
    Aaron Becker, Mar 4, 2006
    #3
  4. 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
     
    Robert Klemme, Mar 6, 2006
    #4
  5. Aaron Becker

    Eric Hodel Guest

    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 - - http://blog.segment7.net
    This implementation is HODEL-HASH-9600 compliant

    http://trackmap.robotcoop.com
     
    Eric Hodel, Mar 7, 2006
    #5
  6. --Apple-Mail-26-238961077
    Content-Transfer-Encoding: 7bit
    Content-Type: text/plain;
    charset=US-ASCII;
    delsp=yes;
    format=flowed


    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.
    --Apple-Mail-26-238961077--
     
    Logan Capaldo, Mar 7, 2006
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Hendra Gunawan
    Replies:
    1
    Views:
    12,598
    Allan Herriman
    Apr 8, 2004
  2. Andre Kelmanson

    blocking i/o vs. non blocking i/o (performance)

    Andre Kelmanson, Oct 10, 2003, in forum: C Programming
    Replies:
    3
    Views:
    941
    Valentin Tihomirov
    Oct 12, 2003
  3. nukleus
    Replies:
    14
    Views:
    838
    Chris Uppal
    Jan 22, 2007
  4. Christian
    Replies:
    5
    Views:
    738
    Esmond Pitt
    Dec 2, 2007
  5. Serge Savoie
    Replies:
    4
    Views:
    272
    Serge Savoie
    Oct 1, 2008
Loading...

Share This Page