node.jsのいろいろなモジュール24 – dnodeでリモート関数呼び出し

2013.03.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

node.jsでRPCサーバ

今回紹介するdnodeモジュールは、node.jsをRPCサーバにするためのモジュールです。
サーバ側で関数を定義しておけば、dnodeサーバへ接続してその関数を呼び出すことができます。
また、dnodeはjavascript以外のクライアントもあります。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.4
  • Node.js : v0.8.15
  • npm : 1.1.66

適当なディレクトリを作成し、そこでnpmを使用して必要モジュールをインストールします。

% mkdir dnode
% cd dnode
% npm install dnode

dnodeを動かしてみる

まずはサーバ側の実装です。dnode関数内で、クライアントから使用したい関数を定義します。
ここではgreetという名前の関数を定義しています。

//app.js
var dnode = require('dnode');
var server = dnode({
    greet : function (n, cb) {
        cb('hello,' + n);
    }
});
server.listen(3000);

サーバ側が定義できたら次はクライアント側(client.js)を作成します。
dnodeサーバへ接続し、サーバ側で定義したgreet関数を呼び出しています。

//client.js
var dnode = require('dnode');

var d = dnode.connect(3000);
d.on('remote', function (remote) {
    remote.greet('syuta', function (say) {
        console.log('greet:' + say);
        d.end();
    });
});

dnodeサーバを起動し、クライアントを実行して関数を呼び出してみましょう。
問題なく実行できることがわかります。

//dnodeサーバ起動(バックグラウンド)
% node app.js &

//クライアント実行
% node client.js

まとめ

dnodeモジュールを使って、簡単にRPCサーバを実装することができました。
javascript以外にもJava用クライアントとかRuby用クライアント等があるので、そこから接続することもできます。

参考サイトなど