<div dir="ltr">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.<div>
<br></div><div>It looks like ws_handler:websocket_init/3 starts a 1 second timer.</div><div>When that timer fires then you're seeing the 1 second handler, which is ws_handler.</div><div>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</div>
<div><br></div><div>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.)</div>
<div><br></div><div>HTH.</div><div><br></div><div>-mox</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Mar 10, 2014 at 2:32 PM, t x <span dir="ltr"><<a href="mailto:txrev319@gmail.com" target="_blank">txrev319@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
  I'm trying to understand what Erlang is doing with the following<br>
piece of code:<br>
<br>
<a href="https://github.com/extend/cowboy/blob/master/examples/websocket/src/ws_handler.erl" target="_blank">https://github.com/extend/cowboy/blob/master/examples/websocket/src/ws_handler.erl</a><br>
<br>
  Please note:<br>
<br>
  * this code is running fine (I don't need help trouble shooting the code)<br>
<br>
  * the behavior I get matches my intuition of what is happening<br>
<br>
  My actual problem is _why_ does everything happen the way it is.<br>
<br>
<br>
### Behavior I get:<br>
<br>
  Upon opening a websocket and connecting, I get back:<br>
<br>
  Hello!<br>
  [ 1 second delay ]<br>
  How' you doing'?<br>
  [ 1 second delay ]<br>
  How' you doing'?<br>
  ...<br>
<br>
<br>
  This behavior is expected because<br>
<br>
  * websocket_init is called, which causes a "Hello!" message to be<br>
sent to self (handled by websocket_info)<br>
<br>
  * every time websocket_info is called, it:<br>
      * registers 1-second call back for "How'you doing'?"<br>
      * and sends out the msg it received<br>
<br>
<br>
## Question: What is happening behind the scenes with:<br>
<br>
  -behavior(cowboy_websocket_handler) which causes all this to happen?<br>
<br>
<br>
<br>
## What I've tried:<br>
<br>
  So I googled and got:<br>
<br>
<a href="https://github.com/extend/cowboy/blob/master/manual/cowboy_websocket_handler.md" target="_blank">https://github.com/extend/cowboy/blob/master/manual/cowboy_websocket_handler.md</a><br>
<br>
  And this is a great human-level understanding.<br>
<br>
<br>
  However, I want to see the code that makes it happen.<br>
<br>
<br>
  Then, I look at:<br>
<br>
  <a href="https://github.com/extend/cowboy/blob/master/src/cowboy_websocket_handler.erl" target="_blank">https://github.com/extend/cowboy/blob/master/src/cowboy_websocket_handler.erl</a><br>
<br>
<br>
<br>
And now, I am confused.<br>
<br>
<br>
  What I see is a bunch of "-callback" lines.<br>
<br>
<br>
<br>
  What I expect to see is something like:<br>
<br>
  spawn(func, ...)<br>
<br>
  func ( ... ) -><br>
     some loop or some sort for handling messages<br>
<br>
<br>
  In particular, my confusion is: it's clear that<br>
behavior(cowboy_websocket_handler) causes some process to be spawned<br>
somewhere. Where is this happening?<br>
<br>
<br>
<br>
Thanks!<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div>