Как отправлять сообщения через 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)
Это должно работать после этого.