node package manager
Easy collaboration. Discover, share, and reuse code in your team. Create a free org »



Transport-agnostic RPC libraries utilizing node streams have already become quite popular. In my opinion, there is still a problem, though: What if I need to call methods from both ends? Create tow tcp servers? Ugly.

This little library provides RPC streams that you can use to do traditional client/server or to communicate between peers (both sides act as client & server).

var rpc = require('p2p-rpc-stream')
  , net = require('net')
// This node both 
// a server ... 
var server = rpc.createServer({
  echo: function(msg, reply) {
    reply(null, msg)
  hello: function(reply) {
    reply(null, 'hello.')
net.createServer(function(sock) {
  var rpc_conn = server.createStream()
  // ... and a client 
  // at the same time! 
  var client = rpc.createClient( // we need to know our own server 
    .pipe(client) // send requests into the other direction and check for replies 
    .pipe(rpc_conn) // check for requests and reply to them 
  client.request('hello', function(er, res) {
    if(er) throw er // will return a Timeout error after some 5secs 
var rpc = require('p2p-rpc-stream')
  , net = require('net')
var client = rpc.createClient()
var sock = net.connect({port: 3000}, function(sock) {


npm install p2p-rpc-stream


  • allow custom request timeouts


(c) 2013 by Marcel Klehr
MIT License