简而言之
是否可以设置一个可以以异步方式处理/调度多个客户端请求的 R-Server?
我想我正在寻找某种套接字通信。或者有什么更有效的方法可以让 R 与其他应用程序对话?
现在,我真的不在乎通信是否最终通过“普通套接字通信”(类似于socketConnection(port=6011, server=TRUE)
服务器进程、socketConnection(host=Sys.info()["nodename"], port=6011)
客户端进程与 JSON 字符串的组合writeLines()
)readLines()
或其他方式实现“高级”,例如使用基于 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 学分的赏金。