[免责声明:我对套接字的了解非常生疏,我刚刚进入R,所以如果我错过了一些完全明显的东西,请指出它!]
如果我没有理解用于创建和管理插座,即(稀疏文件)R的功能socketConnection和make.socket,看来,创建一个服务器套接字(时server=TRUE),以下的道德相当于进行:
s = socket(yada yada);
listen(s, ...);
s2 = accept(s, ...);
close(s, ...);
Run Code Online (Sandbox Code Playgroud)
现在我可以使用s2但无法循环处理积压的传入连接s.这或多或少是正确的吗?在处理第一个连接后,有没有办法继续监听并继续处理其他传入连接?
我也想知道这个问题的答案!...但与此同时,我至少可以建议一种有一些限制的解决方法:
如果您知道将连接多少客户端,那么以下操作应该可行。
在服务器上:
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...
}
Run Code Online (Sandbox Code Playgroud)
在每个客户端上:
port=22131
# Connect to server
s <- socketConnection('localhost', port=port)
# ...then send data...
writeLines(c('foo', 'bar'), s)
Run Code Online (Sandbox Code Playgroud)