Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

socket.io-rpc

capaj206MIT1.1.3

Minimalistic remote procedure call(RPC/RMI) library bootstrapped on socket.io

socket.io, rpc, isomorphic, rmi

readme

socket.io-rpc Build Status Join the chat at https://gitter.im/capaj/socket.io-rpc

NPM badge Dependency Status devDependency Status

Has an isomorphic(browser or node) client library(which sits in separate repo/npm package). Client side library has to be installed via JSPM.

It is a minimalistic remote procedure call(RPC/RMI) library bootstrapped on socket.io. Main purpose is to make it more easier to structure your async code for browser-server realtime interaction. Typical example is when you need to call a function on the server from client and get the return value from that function back to the client. With raw socket.io, you need to register few events and emit them at the right moment. This can get complicated quite easily, especially for async operations and error handling. Thanks to promises(and try/catch for sync operations), this library knows when a computation failed or suceeded.

With socket.io-rpc, you just expose a tree of functions and then call those, socket.io-rpc automatically resolves a promise on other side, when function returns or returned promise is resolved. It propagates thrown errors, so it is much easier to do errorhandling than with http error codes.

Why promises over network rather than HTTP codes?

Because they are more real abstraction on long running tasks over the network. Trying to map all possible error and their causes to available HTTP codes is impossible for any but simplest of web applications.

Simple example

Folder with example can be run after installing all dependencies like this in the simple-example folder:

npm install //this runs jspm install too

Then run it from git repo root:

node simple-example/server

With authentication (server)

Set authentication normally as you would with socket.io.

With authentication (browser)

Send your auth token with the backend connect method(the one that is exported from the module).

Browser support

numbers are for both clients(vanilla and Angular):
IE    FIREFOX    SAFARI    CHROME    OPERA    IPHONE    ANDROID
9.0+    3.5+    4.0+    4.0+    10.5+    2.0+    2.0+

Internal callbacks on client

There are 4 internal callbacks, which might help you in case you need to be notified of a request beginning and ending:

batchStarts   //called when invocation counter equals 1
batchEnds      //called when invocation counter equals endCounter
call          //called when one call is made to server
response           //called when a call response is fired

changelog

ChangeLog

0.8.8 -> 0.8.9

Client now separated in another npm package. use npm install socket.io-rpc-client to get it.

0.6.9 -> 0.7.0

Now only usable with commonJS compatible module loader. I strongly advise to use systemJS module loader in the browser.

0.5.4 -> 0.6.0

More reasonable public API refactor, which now requires you to connect before you can load channels

0.3.18 -> 0.3.19

Finally a proper version of socket.io, so I removed temporary hacks from client channels instantiation, updated express.js peerDependency to ~4

0.3.12 -> 0.3.13

channel is now injected into the controller, not put on scope as a property as before, be aware when updating

0.3.9 -> 0.3.10

Switched once again promise library, now to Bluebird for even better performance, I doubt that any faster promise implementation will replace it any time in next year, so bluebird will last longer than the last two

0.2.5 -> 0.3.0

Synchronous resolution of a call can be now also rejected without need to create and reject a promise by simply returning an instance of Error

0.1.3 -> 0.1.4

Added a directive to angularJS client to make instantiating a controller with rpc channel less of a chore

0.0.8 -> 0.0.9

Switched from Q to when.js for better performance