Ответ 1
Хорошо, так я думаю, что можно реализовать реактивный R.
Неблокирующие вызовы из java
Вам нужно развить RSWA java-клиент и разделить метод request
на две части в этой строке [1]. Первая часть записывает запрос в сокет, а вторая ждет ответа. Нам нужно сделать необязательный вариант ожидания, например, некоторым флагом boolean
.
Возвращаемый результат из R
Вам потребуется какое-то активное общение с Java. Одна из возможностей - использовать простые сокеты или что-то более высокоуровневое как HTTP. Я подумал о пакете httpRequest [2]. Таким образом, вызов из java должен выглядеть так:
connection.eval(s"""simplePostToHost(
"192.168.12.12","/listener/results/",
try(eval(parse(text="$code")),silent=TRUE),port=8080""")
Прослушивание результата в Java
Запрос и ответ должны предоставлять уникальный идентификатор, чтобы мы знали, какой ответ для какого запроса. Вы должны запустить некоторую службу, которая прослушивает путь/слушатель/результаты для входящих результатов и сообщает Java, что результат готов. Он также должен включать повторное использование RConnection, которое ранее должно быть отмечено как "занято". Я рекомендую использовать эту часть scala Promise [T].
Надеюсь, это поможет кому-то. Я, вероятно, собираюсь реализовать его, как только моя компания нуждается в этом.
[2] https://cran.r-project.org/web/packages/httpRequest/httpRequest.pdf