寻求可响应/stop请求后程序化停止的HTTP Web Server R包
在R中实现可程序化停止的HTTP服务器
可以用httpuv包实现这个需求,通过手动控制服务循环,在收到/stop请求后触发停止逻辑,具体代码如下:
library(httpuv) # 初始化停止标记 stop_flag <- FALSE # 定义请求处理逻辑 request_handler <- function(req) { if (req$PATH_INFO == "/stop") { # 触发停止标记 stop_flag <<- TRUE # 返回停止响应 list( status = 200L, headers = list('Content-Type' = 'text/plain'), body = "服务器即将停止..." ) } else { # 默认响应 list( status = 200L, headers = list('Content-Type' = 'text/plain'), body = "R服务器运行中,访问 /stop 可停止服务。" ) } } # 启动非阻塞服务器 server_instance <- startServer(host = "0.0.0.0", port = 8080, app = list(call = request_handler)) # 循环处理请求,直到触发停止标记 while (!stop_flag) { service(0.01) # 每次检查间隔0.01秒,避免过度占用CPU } # 停止服务器 stopServer(server_instance) # 执行后续处理工作 cat("服务器已停止,开始执行后续任务...\n") # 在这里添加你的后续处理代码
代码说明
- 用
startServer启动非阻塞服务器,替代阻塞式的runServer,这样能主动控制服务生命周期。 - 访问
/stop端点时,全局变量stop_flag被设为TRUE,循环退出后调用stopServer关闭服务。 - 循环中的
service(0.01)会处理 pending 的请求,同时保持较低的CPU占用。
测试时,访问http://localhost:8080/stop,服务器返回响应后自动停止,随后执行后续处理代码。
内容的提问来源于stack exchange,提问作者jimbod119
相关产品推荐
相关产品推荐

