@kuenishi
Erlang Study Meeting Tokyo 2012.09
9/28
- @kuenishi
- GitHub, Twitter, Facebook
- "Class Change"
- Basho Japan KK
- Serialisation Protocol
- Efficient without compression
- easy to compute
{"compact" : true} 81 A7 compact C3
- msgpack.org
- almost compatible with JSON
- Kind of a Huffman coding
- Shorter code for smaller value
- First byte sometimes include binary length
nil: | 16#C0 |
---|---|
false: | 16#C2 |
true: | 16#C3 |
float: | 16#CA |
double: | 16#CB |
0..127: | 2#0 |
-32..-1: | 2#111 |
2#101: | raw bytes up to 31 bytes |
2#1001: | array up to 15 elements |
2#1000: | map up to 15 entries |
- RPC Protocol
[0, X, "ping", []] => [1, X, nil, "pong"]
- replacable Transport layer
- TCP, UDP, UDS, SCTP, TCP/gz, (ZeroMQ)
- Short request after long-time request can overcome and return earlier
Other implementations
- C++, Java
- Ruby, Python, PHP, Perl, etc....
- github.com/msgpack/msgpack-erlang
- So small because of binary syntax
- 280 LoC
- basic inet_async TCP server
- also has UDP transport
- rather simple process tree
$ wc *.erl [tmp ~/src/msgpack_rpc/src] 249 868 8845 gen_msgpack_rpc.erl 210 736 8822 gen_msgpack_rpc_srv.erl 146 481 5350 mprc.erl 161 522 5398 mprc_tcp.erl 160 522 5525 mprc_udp.erl 63 160 2075 mprs.erl 227 748 8020 mprs_tcp.erl 225 740 8148 mprs_udp.erl 363 1415 13413 msgpack.erl 47 102 1301 msgpack_util.erl 1851 6294 66897 total
$ wc *.erl 55 199 2054 msgpack_rpc_client.erl 208 632 7552 msgpack_rpc_connection.erl 187 553 6105 msgpack_rpc_protocol.erl 450 1384 15711 total
- Start server which exports the function
-export([hello/1]). hello(_Argv)-> <<"hello">>. ... {ok, _Pid} = cowboy:start_listener(testlistener, 3, cowboy_tcp_transport, [{port, 9199}], msgpack_rpc_protocol, [{module, msgpack_rpc_test}]),
- Start client
{ok, Pid} = msgpack_rpc_client:connect(tcp, "localhost", 9199, []), {ok, <<"hello">>} = msgpack_rpc_client:call(Pid, hello, [<<"hello">>]),
- No string list
- Use binary string for "string" in other languages
- JSON object (Python dict) is: {proplist()}
- Implementing transport is difficult even in Erlang
- Replacable transport layer
- Stable
T H A N K S
- msgpack-rpc-erlang 0.4.0 doesn't work with cowboy 0.7.0 !!!!!!
- let's do the fxxking REVIEW.
- still needs fix in deps/cowboy/rebar.config
- and just released 0.5.0 (master).