[erlang-questions] Server Sent Events

Jesper Louis Andersen <>
Wed Aug 23 12:38:08 CEST 2017


Here is what I think is going wrong, though I'm not entirely sure:

The Yaws yaws_sse:data/1,2 functions assume the data you give them are
so-called iodata(). So when you write something like

["Button1", "Button2"]

and send it, it is effectively flattened into a binary

<<"Button1Button2">>

The iodata() system is really nice for doing scatter/gatter (typo intended)
IO, but you have to invent some kind of framing in which you run.

For example, we could use JSON:

X = [<<"Button1">>, <<"Button"2>>],
Data = yaws_sse:data(jsx:encode(X)),
...

which encodes the data into a JSON structure which we can handle on the
client side.

Also, look up the iodata() concept. It is pretty nice. There is an old post
by James Hague on it:

http://prog21.dadgum.com/70.html


On Wed, Aug 23, 2017 at 12:27 PM Gattu shiva krishna <
> wrote:

> Hi all,
>
>          I'm learning to use yaws web-server and I came across server
> sent events which is used to send data to the client. To send data to
> the client I'm using the function yaws_sse:send_events(A#arg.clisock,
> Data). What is the format of arguments that need to be given to this
> function. I've googled enough and didn't get any satisfactory results.
> Below is a sample application where I'm trying to experiment on
> server-sent-events.
>
>      Here in code I'm trying to create buttons dynamically in client
> side based on data that comes from server side.
>
>
> ---------------------------------------------------------------------------------------------------------------------------------------
>
> SERVER SIDE CODE:
>
>   <erl>
>          out(A) ->
>              Data = yaws_sse:data(["Button1",
> "Button2","Button3","Button4"]),
>
>              yaws_sse:send_events(A#arg.clisock, Data).
>      </erl>
>
>
> ---------------------------------------------------------------------------------------------------------------------------------------
>
> CLIENT SIDE CODE:
>
> <script type="text/javascript">
>        var source = new EventSource("button.yaws");
>        source.onmessage = function(event) {
>              var i, buttonsToCreate,buttonContainer, newButton;
>
>          buttonsToCreate = event.data;
>              buttonContainer =
> document.getElementById('this_element_contains_my_buttons');
>          for (i = 0; i <= buttonsToCreate.length ; i++)
>          {
>                newButton = document.createElement('input');
>                newButton.type = 'button';
>                newButton.value = buttonsToCreate[i];
>                newButton.id = buttonsToCreate[i];
>                buttonContainer.appendChild(newButton);
>          }
>      };
>
>      </script>
>
> _______________________________________________
> 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/20170823/60267b72/attachment.html>


More information about the erlang-questions mailing list