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
我想将我的 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