2.4.6 • Published 2 years ago

websocket-jsonrpc-api-server v2.4.6

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

websocket-jsonrpc-api-server

api server with websocket and jsonrpc.
easily build a websocket server with jsonrpc.

this provides

  • request/response like api - called Route in this api
  • subscription api - used to broadcast some continuous data to client who are subscribing.

default Route

to support subscription, this api provide 3 default Route below

  • "register/subscriptions": use when client subscribe some subscriptions.
    request/response should be like
    --> {"jsonrpc": "2.0", "id": "registerSubs", "method": "register/subscriptions","params": {"subscriptions": ["your.subscription.name1", "your,subscription.name2"]}}

    <-- {"jsonrpc":"2.0", "id": "registerSubs", "result": "accepted"} //when request is not notification(= when field 'id' is included)

  • "delete/subscriptions": use when client unsubscribe some subscriptions.
    request/response should be like
    --> {"jsonrpc": "2.0", "id": 1, "method": "delete/subscriptions","params": {"subscriptions": ["your.subscription.name1", "your,subscription.name2"]}}

    <-- {"jsonrpc": "2.0", "id": 1, "result": "accepted"} //when request is not notification(= when field 'id' is included)

  • "delete/allSubscriptions": use when client unsubscribe all subscriptions.
    request/response should be like
    --> {"jsonrpc": "2.0", "id": 2, "method": "delete/allSubscriptions","params": {}}

    <-- {"jsonprc": "2.0", "id": 2, "result": "accepted"} //when request is not notification(= when field 'id' is included)

How to use

const deployPort = 9888;

const { EventEmitter } = require('events');
const wjs = require('websocket-jsonrpc-api-server');

const logger = wjs.logger;
const logFile = logger.logFile;
const errLogFile = logger.errLogFile;
const sendLog = logger.sendLog;

//start logging, to write log, this is required
logger.enableLogger();

//argument of startSecureServer(pathCert, pathKey) is specified by path to key files.
const pathCert = "./certs/selfCert.pem";
const pathKey = "./certs/selfKey.pem";

//start server on your port
//wjs.startServer(deployPort);

//or start server as websocket secure(wss://)
wjs.startSecureServer(pathCert, pathKey);

//get router
const router = wjs.router;

//register route by bindRoute(rName: string, function(req));
//when error, throw exception in function to bind
//any return will be interpreted as success
router.bindRoute("get/nhoge", (req) => {
    let params = req.getParams();
    if(!(params.hasOwnProperty('n'))){
        throw 'parameter n should be contained into params';
    }

    if(isNaN(params.n)){
        throw 'parameter n should be number';
    }

    let msg = "";
    let n = Number(params.n);


    for(let i = 0; i < n; i++){
        msg += "hoge";
    }

    return {
        "msg": msg
    };

});

//register subscription by bindSubscription(sName: string, function(), ws: wjs.ws, interval: number);
//subscription name will be "subscription.get.randomValue"
router.bindSubscriptionByInterval("get.randomValue", () => {
    let val = Math.floor(Math.random() * 1000);
    let res = {
        "val": val
    }
    return res;
}, 1000);


const timeEvent = new EventEmitter();
/**
 * register subscription by bindSubscriptionByEvent(sName, function, EventEmitter);
 * when eventEmitter.emit('result') -> execute registered method and broadcast to subscriber;
 * when eventEmitter.emit('notice', arg) -> broadcast notification to subscriber;
 */
router.bindSubscriptionByEvent("get.currentTime", () => {
    const currentTime = Date.now().toString();
    return {"t": currentTime};
}, timeEvent);

//emit event to excecute subscription method
setInterval( () => {
    timeEvent.emit('result');
}, 1000);

/**
setTimeout( () => {
    timeEvent.emit('notice', "subscription.get.currentTime is deleted");
    router.unbindSubscription('subscription.get.currentTime');
    router.unbindSubscription("subscription.get.randomValue");  // delete subscription dynamically
    router.unbindRoute("get/nhoge");    //delete route dynamically
}, 30000);
 * 
 */
2.4.1

2 years ago

2.4.3

2 years ago

2.4.2

2 years ago

2.4.5

2 years ago

2.4.4

2 years ago

2.4.6

2 years ago

2.3.2

2 years ago

2.4.0

2 years ago

2.3.1

2 years ago

2.3.0

2 years ago

2.2.2

2 years ago

2.2.1

2 years ago

2.2.0

2 years ago

2.1.1

2 years ago

2.1.0

2 years ago

2.0.3

2 years ago

2.0.2

2 years ago

2.0.1

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago