roytan883 / pomelo-rpc-ws

websocket rpc framework for pomelo
MIT License
12 stars 7 forks source link

pomelo-rpc-ws - rpc framework for pomelo

Installation

npm install pomelo-rpc-ws

modify pomelo app.js

var wsrpc = require('pomelo-rpc-ws');
app.configure('production|development', function() {

    app.set('proxyConfig', {
        rpcClient: wsrpc.client
    });

    app.set('remoteConfig', {
        rpcServer: wsrpc.server
    });

});

pomelo-rpc-ws is the low level RPC framework for pomelo project. It contains two parts: client and server.

The client part generates the RPC client proxy, routes the message to the appropriate remote server and manages the network communications. Support add proxies and remote server information dynamically.

The server part exports the remote services, dispatches the remote requests to the services and also manages the network communications.

And the remote service codes would loaded by pomelo-loader module and more details please access this link.

Installation

npm install pomelo-rpc-ws

Usage

Server

var Server = require('pomelo-rpc-ws').server;

// remote service path info list
var paths = [
  {namespace: 'user', path: __dirname + '/remote/test'}
];

var port = 3333;

var server = Server.create({paths: paths, port: port});
server.start();
console.log('rpc server started.');

Client

var Client = require('pomelo-rpc-ws').client;

// remote service interface path info list
var records = [
  {namespace: 'user', serverType: 'test', path: __dirname + '/remote/test'}
];

// server info list
var servers = [
  {id: 'test-server-1', serverType: 'test', host: '127.0.0.1', port: 3333}
];

// route parameter passed to route function
var routeParam = null;

// route context passed to route function
var routeContext = servers;

// route function to caculate the remote server id
var routeFunc = function(routeParam, msg, routeContext, cb) {
  cb(null, routeContext[0].id);
};

var client = Client.create({routeContext: routeContext, router: routeFunc});

client.start(function(err) {
  console.log('rpc client start ok.');

  client.addProxies(records);
  client.addServers(servers);

  client.proxies.user.test.service.echo(routeParam, 'hello', function(err, resp) {
    if(err) {
      console.error(err.stack);
    }
    console.log(resp);
  });
});

Server API

Server.create(opts)

Create a RPC server instance. Intitiate the instance and acceptor with the configure.

Parameters

server.start

Start the remote server instance.

server.stop

Stop the remote server instance and the acceptor.

Acceptor

Implement the low level network communication with specified protocol. Customize the protocol by passing an acceptorFactory to return different acceptors.

acceptor.listen(port)

Listen the specified port.

acceptor.close

Stop the acceptor.

Client API

Client.create(opts)

Create an RPC client instance which would generate proxies for the RPC client.

Parameters

client.addProxies(records)

Load new proxy codes.

Parameters

client.addServers(servers)

Add new remote server informations.

Parameters

client.start(cb)

Start the RPC client.

client.stop

Stop the RPC client and stop all the mail box connections to remote servers.

client.rpcInvoke(serverId, msg, cb)

Invoke an RPC request.

Parameters

MailBox

Implement the low level network communication with remote server. A mail box instance stands for a remote server. Customize the protocol by passing a mailBoxFactory parameter to client to return different mail box instances.

mailbox.connect(cb)

Connect to the remote server.

mailbox.close

Close mail box instance and disconnect with the remote server.

mailbox.send(msg, opts, cb)

Send the RPC message to the associated remote server.

Parameters