Rap*_*ter 11 sockets webserver client-server r
是否可以设置一个可以异步方式处理/分派多个客户端请求的R-Server ?
我想我正在寻找某种套接字通信.或者让R与其他应用程序交谈更有效率吗?
现在,我真的不关心,如果通信是通过"纯香草socket通讯"(类似最终实现socketConnection(port=6011, server=TRUE)对服务器的过程中,socketConnection(host=Sys.info()["nodename"], port=6011)对于客户端进程(ES)结合writeLines()和readLines()JSON的字符字符串)或更多的东西"高级"喜欢使用基于HTTP请求的Web服务器设施.
第一个:关于那些细节信息学细节的背景都是"DIY",所以套接字通信,主服务器概念或异步通信等细节对我来说都是新的.所以请不要咬;-)
我希望我的一个进程充当R-Server.AFAIU,R不是在"多线程范式"下设计的.所以我想知道如何让我的R-Server以异步方式处理并发客户端请求(当前来自通过JSON样式字符串发送其请求/对象的第三方软件).
用简单的英语我想告诉我的服务器进程是这样的:
在端口xy收到传入消息后,执行您需要执行的操作,但立即切换回"响应模式"以便能够处理下一个客户端请求,并始终注意每个客户端获取与其逻辑链接的结果各自的要求.
我从一些非常基本的东西开始:
con <- socketConnection(port=as.numeric(port), server=TRUE)
Run Code Online (Sandbox Code Playgroud)
这将使我的R进程成为服务器.它是一种享受,但由于它con是我的"唯一"连接对象,服务器注定要按顺序处理每个客户端请求:
从连接中读取输入,进行一些计算,将输出写回连接,然后才处理下一个客户端请求.
我想过让我的服务器进程立即将需要完成的所有事情分发给辅助Rscript进程,以便"主"服务器进程准备好接受下一个请求.但是,由于在一天结束时结果需要con再次通过(在我的"主"服务器进程中),我认为这并没有真正给我任何意义,因为服务器进程仍然需要等到辅助进程完成在接受下一个请求之前.或者,我可以告诉这个辅助过程"直接"以某种方式向客户请求报告吗?
虽然我目前的目标不是将我的服务器变成一个成熟的Web服务器,但这些复杂的Web服务器方法对我来说乍一看似乎非常有希望:
是否可以与其中一个进行异步客户端通信?
任何任何指针将大大赞赏!
一旦问题符合条件,我将提供300个积分的赏金.
Sim*_*nek 14
Rserve的设计就是为了做到这一点.
它支持许多客户,R是其中之一.在RSclient包中,您可以RS.eval(.., wait=FALSE)在后台执行评估.您RS.collect可以使用指定连接列表的位置收集结果.
另请参阅Rserve.cluster包,用于将并行处理分派给Rserve实例.
如果您还希望以其他方式(从服务器到客户端)进行异步通信,请参阅Rserve中的OOB命令(这些是代表服务器而不是客户端执行的未经请求的命令).如果需要,现在还有代理支持.请在stats-rosuda-devel邮件列表上提问.