From: Ludovic D. <l.d...@la...> - 2014-02-16 02:03:04
|
Hello, I was looking for a simple push library for Yaws. By "push library" I mean using websockets when available or using other fallback protocols. I found sockjs-erlang[1], which is said to be "framework agnostic" but works only with Cowboy at the moment. Plus it seems to be abandoned, and it uses many fallbacks so implementing a Yaws API would be time-consuming. Then, I found bullet[2], by the creator of Cowboy. This is very good, it uses event-sources (server-sent-events) and long-polling as fallbacks to websockets. I decided to implement the same thing for Yaws. I have built the same example as in the orginal bullet : 4 clocks updated from the server with polling only, eventsource only, websockets only and best available. This is the same thing as in Yaws' SSE example [3]. On the client-side, I use the original bullet.js file, there are no differences in the javascript API. Server-side, the callbacks modules have small differences (there is no need to carry the #arg{} all around). My code is far from perfect, I plan to improve it (because I need this) but if anyone is interested, it works. I would be glad to read any advice/corrections/comments on this. To try it just put this in a shell : git clone gi...@gi...:lud/flea.git cd flea/examples/clock make bin/start and open http://localhost:8000/ in your browser. Messages sent from the browser are shown in the erlang shell. Yaws/ebin must be in erlang's search path. If not, you can add it as a dep in examples/clock/rebar.config. Ah, and of course you need rebar in your path :) Not tested on window. The code is here : https://github.com/lud/flea Thanks for reading -- lud [1] https://github.com/sockjs/sockjs-erlang [2] https://github.com/extend/bullet [3] http://hyber.org/server_sent_events.html |