HTTP.jl doesn't seem to be good at handling over 1k concurrent requests, in comparison to an alternative in Python?

Thinking about this some more you might be able to do something like:

using Threads
function init_server(host::IPAddr = ip"0.0.0.0", port = 3000)
    servers = []
    for i in 1:nthreads()
        push!(Threads.@spawn HTTP.serve(handler, host, port + i; server = server))
    end
    return servers
end

Which should start a task on each of the threads available that listens on a different port starting at 3001. I’m not sure if there would be any funnyness with router and mutliple threads however. That keeps everything in one process space.

You would still need a reverse proxy (apache http/nginx) to load balance between the ports.