mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 20:30:23 +00:00
Remove cowboy_sub_protocol from the documentation
This will be reintroduced in a future release once the interface stabilizes. For the time being it will be an internal module only.
This commit is contained in:
parent
e4cab480dc
commit
3099fc1d9f
5 changed files with 0 additions and 115 deletions
|
@ -73,9 +73,6 @@ include::streams.asciidoc[Streams]
|
|||
|
||||
include::middlewares.asciidoc[Middlewares]
|
||||
|
||||
// @todo Rather have two chapters, custom handlers and custom protocol upgrades
|
||||
include::sub_protocols.asciidoc[Sub protocols]
|
||||
|
||||
= Additional information
|
||||
|
||||
include::migrating_from_1.0.asciidoc[Migrating from Cowboy 1.0 to 2.0]
|
||||
|
|
|
@ -68,17 +68,6 @@ init(Req, State) ->
|
|||
{cowboy_websocket, Req, State}.
|
||||
----
|
||||
|
||||
You can also switch to your own custom handler type:
|
||||
|
||||
[source,erlang]
|
||||
----
|
||||
init(Req, State) ->
|
||||
{my_handler_type, Req, State}.
|
||||
----
|
||||
|
||||
How to implement a custom handler type is described in the
|
||||
xref:sub_protocols[Sub protocols] chapter.
|
||||
|
||||
=== Cleaning up
|
||||
|
||||
All handler types provide the optional `terminate/3` callback.
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
[[sub_protocols]]
|
||||
== Sub protocols
|
||||
|
||||
Sub protocols are used for creating new types of handlers that
|
||||
provide extra functionality in a reusable way. Cowboy uses this
|
||||
mechanism to provide its loop, REST and Websocket handlers.
|
||||
|
||||
This chapter will explain how to create your own sub protocols
|
||||
and handler types.
|
||||
|
||||
=== Usage
|
||||
|
||||
To switch to a sub protocol, the `init/2` callback must return
|
||||
the name of the sub protocol module. Everything past this point
|
||||
is handled by the sub protocol.
|
||||
|
||||
[source,erlang]
|
||||
----
|
||||
init(Req, State) ->
|
||||
{cowboy_websocket, Req, State}.
|
||||
----
|
||||
|
||||
The returned tuple may also have a fourth element containing
|
||||
options for the sub protocol. No option is universal. While
|
||||
it will usually be a map of options, it doesn't have to be.
|
||||
For example loop handlers accept the atom `hibernate`.
|
||||
|
||||
The following snippet switches to the `my_protocol` sub
|
||||
protocol, sets the timeout value to 5 seconds and enables
|
||||
hibernation:
|
||||
|
||||
[source,erlang]
|
||||
----
|
||||
init(Req, State) ->
|
||||
{my_protocol, Req, State, #{
|
||||
timeout => 5000,
|
||||
compress => true}}.
|
||||
----
|
||||
|
||||
Sub protocols should ignore unknown options so as to not waste
|
||||
resources doing unnecessary validation.
|
||||
|
||||
=== Upgrade
|
||||
|
||||
After the `init/2` function returns, Cowboy will call either
|
||||
the `upgrade/4` or the `upgrade/5` function. The former is called
|
||||
when no options were given; the latter when they were given.
|
||||
|
||||
The function is named `upgrade` because it mimics the mechanism
|
||||
of HTTP protocol upgrades. For some sub protocols, like Websocket,
|
||||
an actual upgrade is performed. For others, like REST, this is
|
||||
only an upgrade at Cowboy's level and the client has nothing to
|
||||
do about it.
|
||||
|
||||
The upgrade callback receives the Req object, the middleware
|
||||
environment, the handler and its state, and for `upgrade/5`
|
||||
also the aformentioned options.
|
||||
|
||||
[source,erlang]
|
||||
----
|
||||
upgrade(Req, Env, Handler, State) ->
|
||||
%% Sub protocol code here.
|
||||
|
||||
upgrade(Req, Env, Handler, State, Opts) ->
|
||||
%% Sub protocol code here.
|
||||
----
|
||||
|
||||
These callbacks are expected to behave like middlewares and to
|
||||
return an updated environment and Req object.
|
||||
|
||||
Sub protocols are expected to call the `cowboy_handler:terminate/4`
|
||||
function when they terminate. This function will make sure that
|
||||
the optional `terminate/3` callback is called, if present.
|
|
@ -43,7 +43,6 @@ Behaviors:
|
|||
* link:man:cowboy_middleware(3)[cowboy_middleware(3)] - Middlewares
|
||||
* link:man:cowboy_rest(3)[cowboy_rest(3)] - REST handlers
|
||||
* link:man:cowboy_stream(3)[cowboy_stream(3)] - Stream handlers
|
||||
// @todo * link:man:cowboy_sub_protocol(3)[cowboy_sub_protocol(3)] - Sub protocols
|
||||
* link:man:cowboy_websocket(3)[cowboy_websocket(3)] - Websocket handlers
|
||||
|
||||
Middlewares:
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
= cowboy_sub_protocol(3)
|
||||
|
||||
== Name
|
||||
|
||||
cowboy_sub_protocol - sub protocol
|
||||
|
||||
== Description
|
||||
|
||||
The `cowboy_sub_protocol` behaviour defines the interface used
|
||||
by modules that implement a protocol on top of HTTP.
|
||||
|
||||
== Callbacks
|
||||
|
||||
=== upgrade(Req, Env, Handler, HandlerOpts) -> {ok, Req, Env} | {suspend, Module, Function, Args} | {stop, Req}
|
||||
|
||||
Req = cowboy_req:req():: The Req object.
|
||||
Env = env():: The request environment.
|
||||
Handler = module():: Handler module.
|
||||
Opts = any():: Handler options.
|
||||
Module = module():: MFA to call when resuming the process.
|
||||
Function = atom():: MFA to call when resuming the process.
|
||||
Args = [any()]:: MFA to call when resuming the process.
|
||||
|
||||
Upgrade the protocol.
|
||||
|
||||
Please refer to the `cowboy_middleware` manual for a
|
||||
description of the return values.
|
Loading…
Add table
Add a link
Reference in a new issue