mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-16 05:00:24 +00:00
Replace terminate/2 with terminate/3, adding a Reason
This should have been done a *long* time ago, back when I initially added Websocket support. This is the first part of two in improving loop handler support with regards to socket closure. Reason may include: {normal, shutdown} for the most normal shutdown, {normal, timeout} for a loop handler timeout shutdown, or {error, _} if an error occured.
This commit is contained in:
parent
297ae32af1
commit
647e95aed1
27 changed files with 76 additions and 99 deletions
|
@ -16,7 +16,7 @@ this should be used for any initialization needs.
|
|||
The second callback, `handle/2`, is where most of your code should
|
||||
be. As the name explains, this is where you handle the request.
|
||||
|
||||
The last callback, `terminate/2`, will be empty most of the time.
|
||||
The last callback, `terminate/3`, will be empty most of the time.
|
||||
It's used for any needed cleanup. If you used the process dictionary,
|
||||
timers, monitors then you most likely want to stop them in this
|
||||
callback, as Cowboy might end up reusing this process for subsequent
|
||||
|
|
|
@ -87,7 +87,7 @@ handlers, Websocket handlers, REST handlers and static handlers. Their
|
|||
usage is documented in the respective sections of the guide.
|
||||
|
||||
Most applications use the plain HTTP handler, which has three callback
|
||||
functions: init/3, handle/2 and terminate/2. Following is an example of
|
||||
functions: init/3, handle/2 and terminate/3. Following is an example of
|
||||
a simple handler module.
|
||||
|
||||
``` erlang
|
||||
|
@ -96,7 +96,7 @@ a simple handler module.
|
|||
|
||||
-export([init/3]).
|
||||
-export([handle/2]).
|
||||
-export([terminate/2]).
|
||||
-export([terminate/3]).
|
||||
|
||||
init({tcp, http}, Req, Opts) ->
|
||||
{ok, Req, undefined_state}.
|
||||
|
@ -105,7 +105,7 @@ handle(Req, State) ->
|
|||
{ok, Req2} = cowboy_req:reply(200, [], <<"Hello World!">>, Req),
|
||||
{ok, Req2, State}.
|
||||
|
||||
terminate(Req, State) ->
|
||||
terminate(Reason, Req, State) ->
|
||||
ok.
|
||||
```
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ practice is known as server-sent events.
|
|||
|
||||
Loop handlers essentially wait for one or more Erlang messages
|
||||
and feed these messages to the `info/3` callback. It also features
|
||||
the `init/3` and `terminate/2` callbacks which work the same as
|
||||
the `init/3` and `terminate/3` callbacks which work the same as
|
||||
for plain HTTP handlers.
|
||||
|
||||
The following handler waits for a message `{reply, Body}` before
|
||||
|
@ -46,7 +46,7 @@ this message.
|
|||
|
||||
-export([init/3]).
|
||||
-export([info/3]).
|
||||
-export([terminate/2]).
|
||||
-export([terminate/3]).
|
||||
|
||||
init({tcp, http}, Req, Opts) ->
|
||||
{loop, Req, undefined_state, 60000, hibernate}.
|
||||
|
@ -57,6 +57,6 @@ info({reply, Body}, Req, State) ->
|
|||
info(Message, Req, State) ->
|
||||
{loop, Req, State, hibernate}.
|
||||
|
||||
terminate(Req, State) ->
|
||||
terminate(Reason, Req, State) ->
|
||||
ok.
|
||||
```
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue