From simon.urbanek at r-project.org  Thu Oct 25 19:44:15 2012
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Thu, 25 Oct 2012 13:44:15 -0400
Subject: [Rd] concurrent requests (Rook,
	but I think the question is more general)
In-Reply-To: <50895EAA.50403@rug.nl>
References: <50882FC1.40608@rug.nl>
	<F8B3AAEF-822A-4970-BD6A-AB88FF8E8B9B@r-project.org>
	<50883CD9.1090509@rug.nl>
	<FEE1BFBC-494F-4CA6-BBE8-5F3D4D8559CD@r-project.org>
	<508845EB.2090007@rug.nl>
	<F1CBF6BC-B328-4298-9033-1859F04CD67B@r-project.org>
	<508850F4.8090208@rug.nl>
	<3E5C503F-4CE8-4130-B255-011C20C7D438@r-project.org>
	<50895EAA.50403@rug.nl>
Message-ID: <D81F9050-F5E1-421E-B295-87AD83BA1578@r-project.org>

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)
> 
> 
> 
> 
> 
> 



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