diff options
author | Loïc Hoguin <[email protected]> | 2011-09-15 23:13:27 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2011-09-15 23:20:02 +0200 |
commit | 04f55eb3c925705da28b3509b2f7e6b203632391 (patch) | |
tree | 684b66874c527f95735205aeb9c52fc0daba95ff /src | |
parent | 89ae3c8cadc6f1ce0a9b66ba5c2e3aa4834d4440 (diff) | |
download | cowboy-04f55eb3c925705da28b3509b2f7e6b203632391.tar.gz cowboy-04f55eb3c925705da28b3509b2f7e6b203632391.tar.bz2 cowboy-04f55eb3c925705da28b3509b2f7e6b203632391.zip |
Allow websocket handlers to hibernate from the websocket_init/3 function
Also improve the documentation about hibernate.
Diffstat (limited to 'src')
-rw-r--r-- | src/cowboy_http_websocket.erl | 8 | ||||
-rw-r--r-- | src/cowboy_http_websocket_handler.erl | 8 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/cowboy_http_websocket.erl b/src/cowboy_http_websocket.erl index 8e951a5..74c5d7a 100644 --- a/src/cowboy_http_websocket.erl +++ b/src/cowboy_http_websocket.erl @@ -116,9 +116,15 @@ handler_init(State=#state{handler=Handler, opts=Opts}, try Handler:websocket_init(Transport:name(), Req, Opts) of {ok, Req2, HandlerState} -> websocket_handshake(State, Req2, HandlerState); + {ok, Req2, HandlerState, hibernate} -> + websocket_handshake(State#state{hibernate=true}, + Req2, HandlerState); {ok, Req2, HandlerState, Timeout} -> websocket_handshake(State#state{timeout=Timeout}, - Req2, HandlerState) + Req2, HandlerState); + {ok, Req2, HandlerState, Timeout, hibernate} -> + websocket_handshake(State#state{timeout=Timeout, + hibernate=true}, Req2, HandlerState) catch Class:Reason -> upgrade_error(Req), error_logger:error_msg( diff --git a/src/cowboy_http_websocket_handler.erl b/src/cowboy_http_websocket_handler.erl index 90cf7ac..2ea0a46 100644 --- a/src/cowboy_http_websocket_handler.erl +++ b/src/cowboy_http_websocket_handler.erl @@ -29,8 +29,7 @@ %% here. %% %% <em>websocket_handle/3</em> receives the data from the socket. It can reply -%% something, do nothing or close the connection. You can choose to hibernate -%% the process by returning <em>hibernate</em> to save memory and CPU. +%% something, do nothing or close the connection. %% %% <em>websocket_info/3</em> receives messages sent to the process. It has %% the same reply format as <em>websocket_handle/3</em> described above. Note @@ -41,6 +40,11 @@ %% <em>websocket_terminate/3</em> is meant for cleaning up. It also receives %% the request and the state previously defined, along with a reason for %% termination. +%% +%% All of <em>websocket_init/3</em>, <em>websocket_handle/3</em> and +%% <em>websocket_info/3</em> can decide to hibernate the process by adding +%% an extra element to the returned tuple, containing the atom +%% <em>hibernate</em>. Doing so helps save memory and improve CPU usage. -module(cowboy_http_websocket_handler). -export([behaviour_info/1]). |