如何在无头Ubuntu上的R session和rstudio-server之间通过svSocket发送消息?

时间:2016-05-08 15:28:01

标签: rstudio-server svsocket

我有一个无头的R服务器,服务于最近的rstudio-server

我需要通过svSocket传递一些对象。

因为svSocket使用TCL / TK消息队列,这需要一个有效的X11会话,我知道我需要在虚拟X11环境中嵌入东西。

我通过ssh登录服务器,在命令行中输入以下命令:

sudo Xvfb :0 &
export DISPLAY=":0"
/usr/lib/rstudio-server/bin/rserver &
R

然后我通过其Web界面登录rstudio-server并输入以下命令:

> library(svSocket)
> startSocketServer()
[1] TRUE

然后,在这个R会话中,我提出以下

> library(svSocket)
> con<-socketConnection(host='localhost', port=8888)
> evalServer(con,'2+2')

我希望获得“4”结果,但R挂起,永远不会返回任何提示。

如果我用常规R替换rstudio-server,一切正常。

这个例子打破rsession的方式有什么特别之处?如何解决?

SessionInfo()

R version 3.2.3 (2015-12-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04 LTS

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=pl_PL.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=pl_PL.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=pl_PL.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=pl_PL.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

1 个答案:

答案 0 :(得分:0)

启动套接字连接时,您需要提及端口号

> library(svSocket)
> startSocketServer(port=8888)

它应该在此之后工作。