[Rd] concurrent requests (Rook, but I think the question is more general)

Richard D. Morey r.d.morey at rug.nl
Thu Oct 25 17:45:46 CEST 2012


On 24/10/12 10:55 PM, Simon Urbanek wrote:
>
> The point is that you need a separate monitoring process or threads. That process can be R, Rserve or any thing else.
>
>
>

Thanks for the tips. This is what I'm currently contemplating:

1. Main interface starts in user's R session, and opens up the interface 
(HTML/Javascript using Rook package)
2. When analysis starts, Rserve is started, with its own web server, 
using Rook, for status updates
3. During analysis, main process calls a callback function which uses 
RSassign() to send progress updates to the Rserve server
4. HTML/Javascript interface can connect to the webserver on the Rserve 
server to get status updates
5. When analysis is done, use RSshutdown() and RSclose() to clean up.

Does this seem reasonable?

One problem I'm having is that when I start Rook on the Rserve server, 
the webserver does not respond (although it is started). Does Rserve 
only respond to requests on the port assigned for RSclient commands?

Best,
Richard

Here's an example:

#######################

library(Rserve)

### This works:

stuff = expression({
   library(Rook)
   s <- Rhttpd$new()
   s$add(
     app=system.file('exampleApps/helloworld.R',package='Rook'),
     name='hello'
   )
   s$start(quiet=TRUE)
   s$browse(1)
   print(s$full_url(1))
})

# This will open the browser to the test app, asking for your name
eval(stuff)

### This does not:

Rserve(args="--no-save")
c <- RSconnect()
RSassign(c, stuff)

# This opens the browser to the correct URL, but the webserver doesn't 
respond.
RSeval(c, quote(eval(stuff)))


#####
# cleanup
RSshutdown(c)
RSclose(c)



More information about the R-devel mailing list