2016-03-07 2 views
4

Возможно ли открыть канал связи между двумя сеансами R на двух разных компьютерах?Как подключить два компьютера, используя R?

Я использую сокеты для подключения сеансов, если оба находятся на одном компьютере. Я полагаю, что с двумя разными компьютерами я должен попробовать веб-сокеты. httpuv поддерживает R как сервер веб-сокета, но, к сожалению, я не смог найти какой-либо обновленный пакет, поддерживающий клиентскую сетевую розетку в R.

Я не привязан к использованию сетевых сокетов. Любое решение, позволяющее осуществлять связь между компьютерами в режиме реального времени, будет работать.

+0

вы пытаетесь сделать какой-либо кластер параллельных вычислений? Этот пакет «снег» может быть вам интересен https://cran.r-project.org/web/packages/snow/index.html –

+0

В чем проблема, которую вы пытаетесь решить? Удаленная сессия на большой машине памяти? Кластеризация? MPI? –

+0

Я не выполняю параллельное вычисление кластера, однако это может быть похоже на концепцию связи. Я пытаюсь создать что-то вроде прокси-сервера в R, который получает запрос от всех клиентов, а затем отправляет их соответствующим работникам. Мое ограничение заключается в том, что я не могу скопировать исходные данные с рабочих компьютеров из-за соображений безопасности, а также не смог получить доступ к рабочим компьютерам из внешних сетей. Поэтому я назначил компьютер в сети, чтобы получить запрос клиента, и отправить их соответствующим работникам с соответствующими данными. –

ответ

1

Я использовал sockets для обмена данными между компьютерами с помощью R.

пример сервера: например

import socket 

server <- function(){ 
    while(TRUE){ 
    writeLines("Listening...") 
    con <- socketConnection(host="localhost", port = 6011, blocking=TRUE, 
          server=TRUE, open="r+") 
    data <- readLines(con, 1) 
    print(data) 
    response <- toupper(data) 
    writeLines(response, con) 
    close(con) 
    } 
} 
server() 

клиента:

import socket 

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
client_socket.connect(("localhost", 6011)) 
while 1: 
    data = raw_input ("Enter text to be upper-cased, q to quit\n") 
    client_socket.send(data) 
    if (data == 'q' or data == 'Q'): 
     client_socket.close() 
     break; 
    else:   
     data = client_socket.recv(5000) 
     print "Your upper cased text: " , data 
Смежные вопросы