R socketConnection / make.socket (): есть ли способ сохранить listen ()? - PullRequest
10 голосов
/ 06 мая 2011

[Отказ от ответственности: мои знания о сокетах очень ржавые, и я только начинаю изучать R, поэтому, если я пропустил что-то совершенно очевидное, укажите это!]

Если я понимаю (редкозадокументировано) R функций для создания и управления сокетами, а именно socketConnection и make.socket, оказывается, что при создании серверного сокета (server=TRUE) выполняется моральный эквивалент следующего:

s = socket(yada yada);
listen(s, ...);
s2 = accept(s, ...);
close(s, ...);

и теперь я могу работать с s2, но не могу выполнить цикл, чтобы справиться с отставанием входящих соединений до s.Это более или менее верно?Есть ли способ продолжать слушать и продолжать обрабатывать дополнительные входящие соединения после обработки первого?

Ответы [ 2 ]

2 голосов
/ 08 мая 2011

Я бы тоже хотел узнать ответ на этот вопрос! ... но в то же время я могу по крайней мере предложить обходной путь с некоторыми ограничениями:

Если вы знаете, КАК МНОГИЕ клиенты будут подключаться, то должно работать следующее:

На сервере:

n=2         # Number of clients
port=22131

slist=vector('list',n)
# Connect to all clients
for(i in 1:n) slist[i] <- socketConnection('localhost', port=port, server=TRUE)

# Wait for a client to send data, returns the client index 
repeat {
  avail <- which( socketSelect(slist) )[[1]]
  # ...then read and process data, rinse, repeat...
}

На каждого клиента:

port=22131
# Connect to server
s <- socketConnection('localhost', port=port)
# ...then send data...
writeLines(c('foo', 'bar'), s)
0 голосов
/ 28 августа 2014

Нет, вы можете прикоснуться к бэк-логину на s1.


Окно 1:

$ R
s1 = socketConnection(server=T,port=12345)
s2 = socketConnection(server=T, port=98765)

Окно 2:

$ nc localhost 12345
If ever I should leave you, it wouldn't be in springtime
Knowing how in spring I'm bewitched by you so
oh no not in springtime, summer, winter, or fall
no never could I leave you at all

Окно 3:

$ nc localhost 98765
for Hitler and Germany
Deutschland is happy and gay
we're marching to a faster pace
look out, here comes the Master Race!

Окно 1:

readLines(s1,1)
# "if ever I should leave you, it wouldn't be in springtime"
readLines(s2,1)
# "for Hitler and Germany"
readLines(s1,1)
# "knowing how in spring I'm bewitched by you so"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...