Rserve throwing SOCK_ERROR - PullRequest
       44

Rserve throwing SOCK_ERROR

0 голосов
/ 24 сентября 2019

У меня есть сценарий R, использующий Rserve для предоставления его в качестве конечной точки API / HTTP.У меня есть пара файлов в настройке.Runner.R

source("funcs5.R")
startWebListener("Test.R", 8081)

И funcs.R

library(plumber)
library(jsonlite)
library(httr)
library(Rserve)
server.headers <<- list("none", "offline")

# Expose any annotated functions within the specified file as a REST API on the specified port
startWebListener <- function(modelName, httpPort) {
  custom_json <- function() {
    function(val, req, res, errorHandler) {
      tryCatch({
        json <- jsonlite::toJSON(
          val,
          auto_unbox = TRUE,
          pretty = FALSE,
          digits = 15
        )

        # Reformat empty values for ROME
        json <- gsub("\"NaN\"", "null", json)
        json <- gsub("\"N/A\"", "null", json)

        res$setHeader("Content-Type", "application/json")
        res$body <- json

        return(res$toResponse())
      }, error = function(e) {
        errorHandler(req, res, e)
      })
    }
  }

  addSerializer("custom_json", custom_json)

  # r <- plumb(modelName)
  # r$run(host = "0.0.0.0", port = httpPort)
  Rserve(debug = FALSE, httpPort, args="--no-save")
}

Примечание. Ранее использовался сантехник, и из-за проблем с производительностью я пытаюсь перейти на Rserve.

Test.R содержит программную логику, которая не связана с моей проблемой.Когда я запускаю эту настройку в PM2, как

pm2 -f start --interpreter="Rscript" Runner.R

Процесс запускается, а затем переходит в состояние ошибки.Когда я просматриваю журнал процесса, я вижу, что это повторяется примерно 15 раз (что, я думаю, означает количество попыток запуска службы)

190|SC | Loading required package: methods
190|SC | Starting Rserve on port
190|SC | 8081 :
190|SC |  /usr/lib64/R/bin/R CMD /home/tonyan/Rserve/libs//Rserve --no-save --RS-port 8081
190|SC | R version 3.4.1 (2017-06-30) -- "Single Candle"
190|SC | Copyright (C) 2017 The R Foundation for Statistical Computing
190|SC | Platform: x86_64-redhat-linux-gnu (64-bit)
190|SC | R is free software and comes with ABSOLUTELY NO WARRANTY.
190|SC | You are welcome to redistribute it under certain conditions.
190|SC | Type 'license()' or 'licence()' for distribution details.
190|SC |   Natural language support but running in an English locale
190|SC | R is a collaborative project with many contributors.
190|SC | Type 'contributors()' for more information and
190|SC | 'citation()' on how to cite R or R packages in publications.
190|SC | Type 'demo()' for some demos, 'help()' for on-line help, or
190|SC | 'help.start()' for an HTML browser interface to help.
190|SC | Type 'q()' to quit R.
190|SC | ##> SOCK_ERROR: bind error #98(address already in use)
190|SC | Rserv started in daemon mode.

Я смотрел на процессы, запущенные надо того, как я запустил свой сценарий (с помощью "sudo netstat -lanp"), и на порту 8081 не было ни одного. После того, как я запустил свой процесс, существует процесс Rserve, работающий на 127.0.0.1:8081.

Итак, что не так с моим кодом или настройкой, которая может вызвать эту ошибку?

Спасибо!

...