Error during cross platform communication between Node.js and R using Rserve on AWS. Error:connect ETIMEDOUT

Error during cross platform communication between Node.js and R using Rserve on AWS. Error:connect ETIMEDOUT

我想将我的 R 脚本从我的 node.js 应用程序传递到 Amazon EC2 实例 运行 Ubuntu 和 Rserve;然后将执行和评估 R 脚本并将 return 处理后的输出返回到我的 node.js 应用程序。

我找到了两个可靠的选择:
1) RIO - (用这个)
2) rserve-client

在继续连接 Rserve 之前,我确保它已启动并且 运行。

ubuntu@ip-172-31-37-254:~$ sudo netstat -nltp|grep Rserve
tcp        0      0 0.0.0.0:6311            0.0.0.0:*               LISTEN 5978/Rserve

开启Rserve的远程连接参数,启动成功

library(Rserve)
Rserve(args="--RS-enable-remote")
Starting Rserve:
/usr/lib/R/bin/R CMD /usr/local/lib/R/site-library/Rserve/libs//Rserve --RS-enable-remote 

R version 3.0.2 (2013-09-25) -- "Frisbee Sailing"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

During startup - Warning message:
Setting LC_CTYPE failed, using "C" 
Rserv started in daemon mode.

1) 使用我的 Node.js 应用程序

中的 RIO 包尝试了一个测试脚本
var rio = require("rio");
console.log("Connecting..");

rio.e({

    host : "ec2-52-40-113-159.us-west-2.compute.amazonaws.com",
    port : "6311",
    command: "pi / 2 * 2",

    callback: function (err, res) {
        if (!err) {
            console.log(res);
        } else {
            console.log("Rserve call failed. " + err);
        }
    }

    // path :"/usr/local/lib/R/site-library"

});

注意:如前所述here,我已相应更新主机参数。


应用 运行 时出错:

node app.js
Connecting..
Rserve call failed. Error: connect ETIMEDOUT 52.40.113.159:6311

我不确定,为什么我无法连接。我缺少任何步骤吗?如果有任何替代包或方法来完成此任务,我们也将不胜感激。谢谢。

您的用例中的问题是您的安全组中没有打开适当的端口。

您必须在 EC2 安全组中打开端口 6311 和 5978,问题就会解决。

您可以将以下规则添加到 EC2 安全组,而不是让端口 6311 和 5878 对世界开放。

Type: Custom TCP Rule, Protocol: TCP, Port Range: 6311, Source: Node.js Server IP
Type: Custom TCP Rule, Protocol: TCP, Port Range: 5978, Source: Node.js Server IP