https://github.com/kessler/node-xn
a distilled engine for creating RPC Servers/Clients
https://github.com/kessler/node-xn
Last synced: 23 days ago
JSON representation
a distilled engine for creating RPC Servers/Clients
- Host: GitHub
- URL: https://github.com/kessler/node-xn
- Owner: kessler
- License: mit
- Created: 2016-06-22T22:11:44.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2018-01-26T22:58:47.000Z (over 7 years ago)
- Last Synced: 2025-04-04T03:31:52.865Z (29 days ago)
- Language: JavaScript
- Size: 27.3 KB
- Stars: 9
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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[](https://www.npmjs.org/package/xn)
## example
### expose core filesystem module using axon
```
npm init
npm i --save xn axon
``````js
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](/test/integration.test.js)## api
## license[MIT](http://opensource.org/licenses/MIT) © yaniv kessler