@nqounetです。

JSON::RPC::SpecというモジュールでCPAN Authorになりました。

JSON::RPC::Spec

JSON::RPC::Specは、JSON-RPCの仕様でJSONをやりとりできるモジュールです。

RPCというのは、Remote Procedure Callのことで、ネットワーク上の別のマシンで処理を実行する手続き、の事を言います。

JSON-RPCは、そのRPCをJSONの形式で可能にした書き方の規格です。

RPCなので、ネットワーク越しの通信を想定しているのですが、その変換部分だけを実装したのが、このモジュールです。

こんな感じで使えます。

1
2
3
4
5
6
7
use JSON::RPC::Spec;

my $rpc = JSON::RPC::Spec->new;
$rpc->register(echo => sub { $_[0] });
print $rpc->parse(
'{"jsonrpc": "2.0", "method": "echo", "params": "Hello, World!", "id": 1}'
); # -> {"jsonrpc":"2.0","result":"Hello, World!","id":1}

狙いはWebSocket

前の記事でも書いたとおり、WebSocketでの通信時に使えるフレームワーク的なものが欲しかったのですが、JSON-RPCは通信についても含まれるので、単純にWebSocketで使うことはできません。

RPCは送信側(client)と受信側(server)があって成立するようになっているので、双方向の通信には合いませんが、methodparamsを用いる仕組みとして利用するのは可能だろうと思いました。

効率的には、オレオレ実装の方が明らかに良いのですが、汎用性に欠けてしまうので、リモート要素がなくても規格に沿うのは良いことだと思います。

そんなわけで、今はWebSocketで使えるようなモジュールを作っています。

如何でしょうか?