Latest commit a45813c Feb 18, 2017 @essen essen Allow passing options to sub protocols
Before this commit we had an issue where configuring a
Websocket connection was simply not possible without
doing magic, adding callbacks or extra return values.
The init/2 function only allowed setting hibernate
and timeout options.

After this commit, when switching to a different
type of handler you can either return

  {module, Req, State}

or

  {module, Req, State, Opts}

where Opts is any value (as far as the sub protocol
interface is concerned) and is ultimately checked
by the custom handlers.

A large protocol like Websocket would accept only
a map there, with many different options, while a
small interface like loop handlers would allow
passing hibernate and nothing else.

For Websocket, hibernate must be set from the
websocket_init/1 callback, because init/2 executes
in a separate process.

Sub protocols now have two callbacks: one with the
Opts value, one without.

The loop handler code was largely reworked and
simplified. It does not need to manage a timeout
or read from the socket anymore, it's the job of
the protocol code. A lot of unnecessary stuff was
therefore removed.

Websocket compression must now be enabled from
the handler options instead of per listener. This
means that a project can have two separate Websocket
handlers with different options. Compression is
still disabled by default, and the idle_timeout
value was changed from inifnity to 60000 (60 seconds),
as that's safer and is also a good value for mobile
devices.
Permalink
..
Failed to load latest commit information.
priv Add EventSource example Feb 16, 2013
src Allow passing options to sub protocols Feb 18, 2017
Makefile Simplify specifying the Cowboy version in examples Jan 14, 2016
README.asciidoc Simplify example instructions and fix broken examples Jan 14, 2016
relx.config

README.asciidoc

EventSource example

To try this example, you need GNU make and git in your PATH.

To build and run the example, use the following command:

$ make run

Then point your browser to http://localhost:8080