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

Simon Urbanek simon.urbanek at r-project.org
Thu Oct 25 19:44:15 CEST 2012


Richard,

that is not what I had in mind :). Also Rserve 0.x doesn't have built-in HTTP, only the 1.x series does. Unfortunately I don't have any time today to write example code, but I would suggest using HTTP for both - just have a hook that simply accepts serialized R object in the body of the HTTP request and assigns it to your result. Then you have a second hook that delivers the result back (in whatever form you want it). It should be really easy to do with Rook in a separate process. In your computation session you simply fire off a HTTP POST request with the current status as a serialized R object.

Cheers,
Simon



On Oct 25, 2012, at 11:45 AM, Richard D. Morey wrote:

> 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