Как перезагрузить код, когда работает HTTP-сервер? - PullRequest
1 голос
/ 27 мая 2019

При запуске http-сервера с использованием HTTP.serve, по-видимому, нет способа перезагрузить код, который фактически обрабатывает HTTP-запрос. В приведенном ниже примере я хотел бы, чтобы изменения в my_httphandler учитывались без перезапуска сервера. На данный момент мне нужно остановить сервер от REPL, дважды нажав CTRL + C, а затем снова запустить скрипт.

Есть ли обходной путь?

module MyModule

using HTTP
using Mux
using JSON
using Sockets


function my_httphandler(req::HTTP.Request)    
    return HTTP.Response(200, "Hello world")
end

const MY_ROUTER = HTTP.Router()
HTTP.@register(MY_ROUTER, "GET", "/*", my_httphandler)


HTTP.serve(MY_ROUTER, Sockets.localhost, 8081)

end

Ответы [ 3 ]

0 голосов
/ 28 мая 2019

Revise.jl позволяет автоматически обновлять код в сеансе Julia. Вы можете быть особенно заинтересованы в entr; подробности см. в документации Revise.

0 голосов
/ 29 мая 2019

При использовании HTTP.jl: просто добавьте @async перед HTTP.serve

module MyModule

using HTTP
using Sockets


function my_httphandler(req::HTTP.Request)    
    return HTTP.Response(200, "Hello world")
end

const MY_ROUTER = HTTP.Router()
HTTP.@register(MY_ROUTER, "GET", "/*", my_httphandler)


@async HTTP.serve(MY_ROUTER, Sockets.localhost, 8081)

end # module

При использовании Mux.jl: ничего не происходит, сервер запускается в фоновом режиме

using Mux

function sayhellotome(name)
  return("hello " * name * "!!!")
end

@app test = (
  Mux.defaults,

  route("/sayhello/:user", req -> begin
    sayhellotome(req[:params][:user])

  end),

  Mux.notfound())

Mux.serve(test, 8082)
0 голосов
/ 27 мая 2019

Я не уверен, кэширует ли Mux обработчики.Пока это не так, это должно работать:

module MyModule

using HTTP
using Mux
using JSON
using Sockets

function my_httphandler(req::HTTP.Request)    
    return HTTP.Response(200, "Hello world")
end

const functionref = Any[my_httphandler]

const MY_ROUTER = HTTP.Router()
HTTP.@register(MY_ROUTER, "GET", "/*", functionref[1])


HTTP.serve(MY_ROUTER, Sockets.localhost, 8081)

end


function newhandler(req::HTTP.Request)    
    return HTTP.Response(200, "Hello world 2")
end

MyModule.functionref[1] = newhandler
...