p2p-rpc-stream

0.1.1 • Public • Published

p2p-rpc-stream

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(server.id) // we need to know our own server
  
  sock
    .pipe(client) // send requests into the other direction and check for replies
    .pipe(rpc_conn) // check for requests and reply to them
    .pipe(sock)
  
  client.request('hello', function(er, res) {
    if(er) throw er // will return a Timeout error after some 5secs
    console.log(res)
  })
}).listen(3000)
var rpc = require('p2p-rpc-stream')
  , net = require('net')
 
var client = rpc.createClient()
 
var sock = net.connect({port: 3000}, function(sock) {
  client.pipe(sock).pipe(client)
})

Install

npm install p2p-rpc-stream

Todo

  • allow custom request timeouts

Legal

(c) 2013 by Marcel Klehr
MIT License

Readme

Keywords

none

Package Sidebar

Install

npm i p2p-rpc-stream

Weekly Downloads

12

Version

0.1.1

License

none

Last publish

Collaborators

  • marcelklehr