modular-json-rpc
TypeScript icon, indicating that this package has built-in type declarations

1.0.6 • Public • Published

Build Status Coverage Status

modular-json-rcp

modular-json-rpc is a JSON-RPC 2.0 library.

Features:

  • Simple transport interface allows easy addition of different transports (only ws transport is implemented at the moment)
  • Supports bidirectional calls (see RPCNode)
  • Supports async calls and async server methods
  • Written in typescript (has definitions)

Examples

Server-client RPC

Server code

const RPC = require('modular-json-rpc');
const WebSocket = require('ws');
 
const wss = new WebSocket.Server({ port: 8080 });
 
wss.on('connection', function connection(ws) {
    console.log("New websocket client");
 
    // Create transport interface via websocket
    var transport = new RPC.WSTransport(ws);
 
    // Create RPC server
    var server = new RPC.RPCServer(transport);
 
    // Bind methods
    server.bind("hello", (name) => {
        return `Hello, ${name}!`;
    });
 
    server.bind("add", (a, b) => {
        return a + b;
    });
 
    console.log("RPC Server ready!");
});
 
console.log("Server listening on port 8080");

Client code

const RPC = require('modular-json-rpc');
const WebSocket = require('ws');
 
const ws = new WebSocket('ws://localhost:8080');
 
ws.on('open', async () => {
    console.log("Websocket connected.");
 
    // Create transport interface via websocket
    var transport = new RPC.WSTransport(ws);
 
    // Create RPC client
    var client = new RPC.RPCClient(transport);
 
    console.log(`Calling method hello("world").`);
    var result1 = await client.call("hello", "World");
    console.log(`Response: ${result1}`);
 
    console.log(`Calling method add(16, 32).`)
    var result2 = await client.call("add", 16, 32);
    console.log(`Response: ${result2}`);
 
    process.exit();
});
 

Client console output

$ node client.js
Websocket connected.
Calling method hello("world").
Response: Hello, World!
Calling method add(16, 32).
Response: 48

Bidirectional RPC

Node (ws server) code

const RPC = require('modular-json-rpc');
const WebSocket = require('ws');
 
const wss = new WebSocket.Server({ port: 8080 });
 
wss.on('connection', function connection(ws) {
    console.log("New websocket client");
 
    // Create transport interface via websocket
    var transport = new RPC.WSTransport(ws);
 
    // Create RPC node
    var node = new RPC.RPCNode(transport);
 
    // Note that hello method does not have name argument
    // name is retrieved by calling back and asking for a name
    node.bind("hello", async () => {
        var name = await node.call('getname');
 
        return `Hello, ${name}!`;
    });
});
 
console.log("Server listening on port 8080");

Node (ws client) code

const RPC = require('modular-json-rpc');
const WebSocket = require('ws');
 
const ws = new WebSocket('ws://localhost:8080');
 
ws.on('open', async () => {
    console.log("Websocket connected.");
 
    // Create transport interface via websocket
    var transport = new RPC.WSTransport(ws);
 
    // Create RPC node
    var node = new RPC.RPCNode(transport);
 
    // Other node will call back and request a name
    node.bind('getname', () => {
        return "World";
    });
 
    // Call hello method without providing name
    var result = await node.call('hello');
    console.log(`Response: ${result}`);
 
    process.exit();
});

Client console output

$ node node_client.js
Websocket connected.
Response: Hello, World!

Package Sidebar

Install

npm i modular-json-rpc

Weekly Downloads

0

Version

1.0.6

License

MIT

Unpacked Size

576 kB

Total Files

62

Last publish

Collaborators

  • chemicstry