MessagePack-RPC
仕事先のシステムでmessagepackを使っているということなので、少し勉強してみました。
The MessagePack Project: http://msgpack.org/
高速かつ効率的にシリアライズ・デシリアライズするものらしいです。それに加えて、RPCも用意されています。
ググってみたところ、よく出てくるのがrubyのサンプルコードです。現在は他言語のbindingが作られていますが、プロジェクトとして正式にサポートしているのがc++とrubyらしいです。
それでは、rubyでKVSを作ってみます。
準備
% gem install msgpack % gem install msgpack-rpc
サーバ: kvstest_server.rb
require 'msgpack/rpc' class KVSTest def initialize @hash = Hash.new end def get(key) @hash[key] end def set(key, val) @hash[key] = val nil end end server = MessagePack::RPC::Server.new server.listen '0.0.0.0', 9090, KVSTest.new Signal.trap(:TERM) { server.stop } Signal.trap(:INT) { server.stop } server.run
クライアント: kvstest_client.rb
require 'msgpack/rpc' client = MessagePack::RPC::Client.new('127.0.0.1', 9090) client.call(:set, "key", "value") ret = client.call(:get, "key") puts ret client.close
実行
% ruby kvstest_server.rb & % ruby kvstest_client.rb value %
簡単ですね。とても綺麗に書けます。
ただ、普段rubyを使っていないので、近々perlやc++でも挑戦してみようと思います。