1

遵循 R 非常好的 Plumber 文档,以及从这个有用的链接获得帮助,我能够使用 Plumber 库在 EC2 实例上设置单个 R API,并带有几个端点。

我在 EC2 实例的端口 8000 上有这个 API,为了确认,如果我检查我的 EC2 实例中的进程,我可以在端口 8000 上看到我的 R API:

[ec2-user@ip-123-45-67-890 ~]$ lsof -i tcp:8000
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
R       16784 ec2-user   11u  IPv4 152626      0t0  TCP *:irdmi (LISTEN)

我想在同一台 EC2 服务器上启动第二个 API,我的问题是,我可以使用 EC2 服务器上的其他端口来提供 API 吗?例如,在我的 R 文件中用于“探测”API 的新 API,我只需将端口更改为 8001:

# clear workspace and load library
rm(list = ls())
library(plumber)

# serve API
r <- plumb("NBA_API.R")
r$run(host="0.0.0.0", port=8001)

此外,对于 EC2 实例,更改安全组以便可以访问端口 8001。

这样做(使用不同的端口)可以吗,还是我会通过尝试在不同的端口上托管多个 API 来搞乱 EC2 实例?在我弄乱我当前的 API 之前,我想知道这一点。

提前感谢您对此的任何帮助!

编辑 - 另外,如果可以使用端口 8001,这是否意味着我几乎可以使用任何端口来提供其他 API(8002、8003、8004 等)。有没有我不应该使用的端口?

4

1 回答 1

2

那应该不是问题。您可以在任意端口上托管任意数量的这些。您只需要确保安全组允许流量通过您的计算机,并且如果适用,计算机的本地防火墙也允许流量进入。

但是请注意,在服务器上本地运行 R 并不是最优的。如果 R 进程曾经崩溃(例如,由于代码中的错误可能在不太可能的情况下被绊倒),它不会自动重新启动。同样,如果服务器需要重新启动,您将需要在适当的端口上手动启动适当的进程以使事情再次运行。

您可以查看https://www.rplumber.io/docs/hosting.html中提到的一些托管选项,了解如何以更“生产”的方式托管管道工。我没有在文档中专门讨论 EC2,但其中一些模式(包括 PM2)应该可以在 EC2 机器上正常工作。

于 2018-03-16T19:28:43.927 回答