controller
def process_test(conn, _) do
Plug.Conn.configure_session(conn, renew: true)
Logger.debug("Controler Process : #{inspect self()}")
make_monitor_process()
# IO.inspect conn
Process.sleep(10_000)
text conn, "#{inspect self()} : Done"
end
def make_monitor_process do
target_pid = self()
spawn(fn ->
Logger.debug("Monitor Process : #{inspect self()} , target : #{inspect target_pid}")
Process.flag(:trap_exit, true)
Process.link(target_pid)
receive do
msg -> Logger.debug("Received : #{inspect msg}")
end
end)
end
open your browser and put “localhost:4000/test” on address box and push enter key,
and then refresh your browser before 10 seconds. (just refresh as soon as push enter key)
you’ll see below.
iex(5)> [info] GET /test
[debug] Processing with TestWeb.PageController.process_test/2
Parameters: %{}
Pipelines: [:browser, :not_authenticated]
[debug] Controler Process : #PID<0.1335.0>
[debug] Monitor Process : #PID<0.1345.0> , target : #PID<0.1335.0>
*> [debug] Received : {:EXIT, #PID<0.1335.0>, :shutdown}*
[info] GET /test
[debug] Processing with TestWeb.PageController.process_test/2
Parameters: %{}
Pipelines: [:browser, :not_authenticated]
[debug] Controler Process : #PID<0.1347.0>
[debug] Monitor Process : #PID<0.1357.0> , target : #PID<0.1347.0>
[info] Sent 200 in 10004ms
I am guessing that cowboy killed previous request process
whenever it receives next request before sending response for first one.
my question is that where I can find cowbow or something else’s source
that affect killing process I mentioned above?
and is there any ways to config that kind of thing like waiting for processing request instead of killing it?
Thanks.