Copyright (c) 2014 Aleksandar Radulovic.
Version: 0.9
aberth is a generic BERT-RPC server in Erlang. It exposes regular erlang modules and it uses ranch as TCP acceptor pool which provides low-latency when accepting connections.
The inspiration for the name came from Abarth and BERT.
Aberth supports call, cast and info BERPs. It is up to you, however, to make use of info packets. Aberth routes call and cast requests to your modules and takes care of encoding and decoding.
There's still a bit of thinking left on how to pass the info BERPs to the handler modules in a neat way. Therefore, at the moment, those are not passed through - if you have an idea on how to elegantly solve this, feel free to send a pull request!
Check the example app - it demonstrates including aberth in your OTP app, with clients in Python and Ruby.
-module(some_module).
-export([some_method/3]).
some_method(One, Two, Three) ->
dict:from_list([{one, One}, {two, Two}, {three, Three}]).
-module(some_adder).
-export([add/2]).
add(One, Two) ->
One + Two.
NumberOfAcceptors = 100,
Port = 10001,
Handlers = [some_module, some_adder],
aberth:start_server(NumberOfAcceptors, Port, Handlers).
That's about it - aberth will listen to requests on Port number, with set number of acceptors. Scaling aberth is done via ranch, so all ranch options apply to aberth as well.
Aberth is an OTP app so you can easily make it a part of your own OTP app.
import bertrpc
service = bertrpc.Service('localhost', 10001)
response = service.request('call').some_adder.add(203,302)
assert response == 505
require 'bertrpc'
svc = BERTRPC::Service.new('localhost', 10001)
r = svc.call.some_adder.add(1234, 4321)
puts r
This code will print 5555.