[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