Title here
Summary here
# Writing a basic HTTP server is easy using the 'httpuv' package.
library(httpuv)
# A fundamental concept in HTTP servers is handlers. In R, we can define
# handler functions that take a request and return a response.
hello <- function(req) {
# Functions serving as handlers take a request as an argument
# and return a list containing the response. Here our simple
# response is just "hello\n".
list(
status = 200,
headers = list(
'Content-Type' = 'text/plain'
),
body = "hello\n"
)
}
headers <- function(req) {
# This handler does something a little more sophisticated by
# reading all the HTTP request headers and echoing them into
# the response body.
body <- paste(names(req$HTTP_HEADERS), req$HTTP_HEADERS, sep = ": ", collapse = "\n")
list(
status = 200,
headers = list(
'Content-Type' = 'text/plain'
),
body = body
)
}
# We set up our server routes using a list of path-handler pairs.
router <- list(
'/hello' = hello,
'/headers' = headers
)
# Finally, we start the server with the port and our router.
runServer("0.0.0.0", 8090, list(
call = function(req) {
if (req$PATH_INFO %in% names(router)) {
return(router[[req$PATH_INFO]](req))
} else {
return(list(status = 404, headers = list(), body = "Not Found"))
}
}
))To run the server:
# Run the script in R
Rscript http_server.RAccess the /hello route:
$ curl localhost:8090/hello
helloThis R code uses the httpuv package to create a simple HTTP server. The structure is similar to the original example, with handler functions for different routes. The main differences are:
httpuv instead of net/http.runServer from httpuv.Note that R doesn’t have built-in concurrency like Go, so this server will handle requests sequentially. For more complex applications, you might need to consider other packages or approaches for concurrent request handling in R.
Comments powered by Disqus