odo / timed_buffer

Buffer written in Erlang that flushes automatically after n milliseconds

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

timed_buffer

timed_buffer is an Erlang gen_server that accumlutes some values and then sends them off to a function after a certain time has passed or a certain number of elements are in the buffer.

This is useful if you want to forward data to other parts of your application in batches but want to have an maximum time any piece stays in the buffer.

Installation

git clone git@github.com:odo/timed_buffer.git
cd timed_buffer
./rebar get com

Example Usage

We are creating a buffer that flushes after 5 elements or after 1000 ms.

erl -pz ebin

1> FlushFun = fun(Elements) -> io:format("flush with ~p\n", [Elements]) end.
#Fun<erl_eval.6.90072148>
2> {ok, Buffer} = timed_buffer:start_link(FlushFun, 5, 1000).
{ok,<0.35.0>}
3> [timed_buffer:add(x, Buffer) || _<-lists:seq(1, 5)].
flush with [x,x,x,x,x]
[ok,ok,ok,ok,ok]
4> [timed_buffer:add(x, Buffer) || _<-lists:seq(1, 6)].
flush with [x,x,x,x,x]
[ok,ok,ok,ok,ok,ok]
--- one second passes ---
flush with [x]

About

Buffer written in Erlang that flushes automatically after n milliseconds

License:MIT License


Languages

Language:Erlang 98.2%Language:Makefile 1.8%