Rhythm & Biology

Engineering, Science, et al.

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を使っていないので、近々perlc++でも挑戦してみようと思います。