Как отправлять сообщения через svSocket между R-сессией и rstudio-сервером в безголовой Ubuntu?

У меня есть безголовый R-сервер, который обслуживает последние rstudio-server,

Мне нужно передать некоторые объекты через svSocket,

Поскольку svSocket использует очередь сообщений TCL/TK, для которой нужен рабочий сеанс X11. Я знаю, что мне нужно встраивать вещи в виртуальную среду X11.

Я захожу на сервер через ssh и в командной строке помещаю следующие команды:

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

Затем я захожу на rstudio-сервер через его веб-интерфейс и набираю следующие команды:

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

затем на этой сессии R я поставил следующее

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

Ожидаю получить 4 msgstr "результат, но вместо этого R зависает, никогда не возвращая никакого приглашения

Если я заменю rstudio-сервер на обычный R, все будет работать правильно.

Что такого особенного в том, как оно относится 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 ответ

Вы должны указать номер порта при запуске подключения к сокету

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

Это должно работать после этого.

Другие вопросы по тегам