[erlang-questions] otp / behavior / cowboy_websocket_handler

Mike Oxford <>
Mon Mar 10 23:31:15 CET 2014


Erlang behaviours are, I believe and for lack of a better term, interface
definitions.  It says what is required to be implemented to be a valid
behaviour.  Once it's compiled and verified I do not believe that it's ever
used again.  It does not actually "do" anything since it's just a
specification.

It looks like ws_handler:websocket_init/3 starts a 1 second timer.
When that timer fires then you're seeing the 1 second handler, which is
ws_handler.
The "loop" you're expecting to see is in websocket_app:start/2 where you
register the callbacks (such as ws_handler) for cowboy:start_http/3

So cowboy:start/3 takes in the ws_handler definition, inits it (and that
init starts the 1s timer.)  Every time it fires (eg, every 1 seconds) the
cowboy system will hit the ws_handler callback (which, since it's
a cowboy_websocket_handler behaviour, is known to have a websocket_handle/3
function.)

HTH.

-mox





On Mon, Mar 10, 2014 at 2:32 PM, t x <> wrote:

> Hi,
>
>   I'm trying to understand what Erlang is doing with the following
> piece of code:
>
>
> https://github.com/extend/cowboy/blob/master/examples/websocket/src/ws_handler.erl
>
>   Please note:
>
>   * this code is running fine (I don't need help trouble shooting the code)
>
>   * the behavior I get matches my intuition of what is happening
>
>   My actual problem is _why_ does everything happen the way it is.
>
>
> ### Behavior I get:
>
>   Upon opening a websocket and connecting, I get back:
>
>   Hello!
>   [ 1 second delay ]
>   How' you doing'?
>   [ 1 second delay ]
>   How' you doing'?
>   ...
>
>
>   This behavior is expected because
>
>   * websocket_init is called, which causes a "Hello!" message to be
> sent to self (handled by websocket_info)
>
>   * every time websocket_info is called, it:
>       * registers 1-second call back for "How'you doing'?"
>       * and sends out the msg it received
>
>
> ## Question: What is happening behind the scenes with:
>
>   -behavior(cowboy_websocket_handler) which causes all this to happen?
>
>
>
> ## What I've tried:
>
>   So I googled and got:
>
>
> https://github.com/extend/cowboy/blob/master/manual/cowboy_websocket_handler.md
>
>   And this is a great human-level understanding.
>
>
>   However, I want to see the code that makes it happen.
>
>
>   Then, I look at:
>
>
> https://github.com/extend/cowboy/blob/master/src/cowboy_websocket_handler.erl
>
>
>
> And now, I am confused.
>
>
>   What I see is a bunch of "-callback" lines.
>
>
>
>   What I expect to see is something like:
>
>   spawn(func, ...)
>
>   func ( ... ) ->
>      some loop or some sort for handling messages
>
>
>   In particular, my confusion is: it's clear that
> behavior(cowboy_websocket_handler) causes some process to be spawned
> somewhere. Where is this happening?
>
>
>
> Thanks!
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140310/8e61a7e9/attachment.html>


More information about the erlang-questions mailing list