简而言之
是否可以设置一个可以处理/分派多个客户端请求的R-Server 异步 办法?
我想我正在寻找某种套接字通信。或者让R与其他应用程序交谈更有效率吗?
现在,我真的不在乎通信是否最终通过“普通的套接字通信”实现(类似于 socketConnection(port=6011, server=TRUE)
对于服务器进程, socketConnection(host=Sys.info()["nodename"], port=6011)
与客户进程结合使用 writeLines()
和 readLines()
JSON字符串)或更高级的东西,比如使用基于HTTP请求的Web服务器设施。
更多细节
第一部分:关于那些细节信息学细节的背景都是“DIY”,所以像 套接字通信,细节 主服务器概念 要么 异步通信 等等对我来说都很新鲜。所以请不要咬;-)
我希望我的一个进程充当R-Server。 AFAIU,R不是在“多线程范式”下设计的。所以我想知道如何让我的R-Server处理并发客户端请求(当前来自通过JSON样式字符串发送其请求/对象的第三方软件) 异步 办法。
用简单的英语我想告诉我的服务器进程是这样的:
一旦你在xy端口收到传入消息,就可以做你需要做的事了 立即 切换回“响应模式”以便能够处理下一个客户端请求,并始终注意每个客户端获取逻辑链接到其相应请求的结果。
家庭作业
我从一些非常基本的东西开始:
con <- socketConnection(port=as.numeric(port), server=TRUE)
这将使我的R进程成为服务器。这是一种享受,但从那以后 con
是我的“唯一”连接对象,服务器注定要按顺序处理每个客户端请求:
从连接读取输入,进行一些计算,将输出写回连接并且仅 然后 处理下一个客户端请求。
我想过让我的服务器进程立即将需要完成的所有事情分发给 辅助Rscript进程 以便“主”服务器进程准备好接受下一个请求。但是,由于在一天结束时结果需要通过 con
再次(在我的“主”服务器进程中),我认为这并没有真正给我任何意义,因为服务器进程仍然需要等到辅助进程完成后才能获取下一个请求。或者,我可以告诉这个辅助过程“直接”以某种方式向客户请求报告吗?
虽然我目前的目标不是将我的服务器变成一个成熟的Web服务器,但这些复杂的Web服务器方法对我来说似乎很有希望乍一看:
是否可以与其中一个进行异步客户端通信?
任何指针都将是 非常 不胜感激!
编辑
一旦问题符合条件,我将提供300个积分的赏金。