1.0.0 • Published 6 years ago

xn v1.0.0

Weekly downloads
1
License
MIT
Repository
-
Last release
6 years ago

xn

a distilled engine for creating RPC Servers/Clients

  • Expose any kind of async api, including whole modules, remotely
  • Use any kind of transport layer that supports request/response semantics
  • Expose different versions of the same api using semver

npm status

example

expose core filesystem module using axon

npm init
npm i --save xn axon
const xn = require('./index')
const axon = require('axon')

// create the rpc server
let server = new xn.RpcServer()
server.requireApiModule('fs')
server.addApiFunction('moo', (a, reply) => {
    reply(null, a + 'b')
})

let myApi = {
    ping: reply => reply(null, 'pong'),
    echo: (what, reply) => reply(null, what)
}
server.addApiModule('meow', myApi)

// create the axon sockets
let rep = axon.socket('rep')
let req = axon.socket('req')

rep.bind(3000)
req.connect(3000)

rep.on('message', (message, reply) => {
    // integrate xn server with axon
    server.dispatch(message, reply)
})

// create the rpc client
let client = new xn.RpcClient({
    send: (message, cb) => {
        // integrate xn client with axon
        req.send(message, cb)
    }
})

// expose the remote calls on a local object
client.refresh((err, rpc) => {
    if (err) return done(err)

    // rpc === client.rpc
    rpc.fs.writeFile('myfile', 'test', (err) => {
        console.log(err ? err : 'success')
    })
})

// it is possible to skip the refresh() stage and send an api call immediately:
let message = {
    apiName: 'fs',
    propertyName: 'writeFile',
    args: ['myfile', 'test']
}

client.sendMessage(message, (err) => {
    console.log(err ? err : 'success')
})

For further examples see this test

api

license

MIT © yaniv kessler

1.0.0

6 years ago

0.2.1

6 years ago

0.2.0

8 years ago

0.1.1

8 years ago

0.1.0

8 years ago

0.0.6

8 years ago

0.0.5

8 years ago

0.0.4

8 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

11 years ago