You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Plumber API同时在多个端口上运行?

Plumber API同时监听多个端口的实现方案

原有代码不生效的原因

Plumber的$run()方法原生不支持传入端口向量绑定多个端口,单个R进程同一时间只能运行一个Plumber实例,独占一个端口,因此直接传入port = c(9595, 8585)不会生效。

可行实现方案

方案1:R侧启动多子进程运行多实例

使用callr包启动独立后台子进程,每个子进程运行同一份Plumber代码并绑定不同端口:

  • 先安装依赖包
install.packages("callr")
  • 批量启动多端口服务
library(callr)
library(plumber)

# 配置需要监听的端口列表
target_ports <- c(9595, 8585)
# Plumber脚本路径
plumber_script <- "my_ws.R"

# 批量创建后台运行的Plumber进程
process_list <- lapply(target_ports, function(port) {
  r_bg(
    func = function(run_port, script_path) {
      plumb(script_path)$run(host = "0.0.0.0", port = run_port)
    },
    args = list(run_port = port, script_path = plumber_script)
  )
})
  • 服务启停说明
    • 执行上述代码后所有Plumber实例会在后台独立运行,互不干扰
    • 需要停止所有服务时执行:
lapply(process_list, function(p) p$kill())

方案2:反向代理转发多端口请求

如果你不需要Plumber本身绑定多个端口,只需要用户从多个端口都能访问到同一个Plumber服务,可以用Nginx等反向代理工具,配置多个端口的监听规则,把所有请求转发到Plumber实际运行的单个端口即可。

注意事项

  • 多进程模式下每个Plumber实例的运行环境独立,全局变量、内存缓存不会跨实例共享,如果需要跨实例共享状态,需要借助Redis、数据库等外部存储实现
  • 生产环境建议使用容器编排工具部署,给同一份Plumber服务镜像启动多个容器,分别映射不同宿主机端口,可用性和可运维性更强

内容的提问来源于stack exchange,提问作者elj96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:15:05