https://github.com/notgne2/arc-rpc
Asynchronous Remote Classes make RPC simple
https://github.com/notgne2/arc-rpc
arc-rpc clusters ipc remote rpc spawned
Last synced: about 2 months ago
JSON representation
Asynchronous Remote Classes make RPC simple
- Host: GitHub
- URL: https://github.com/notgne2/arc-rpc
- Owner: notgne2
- Created: 2017-06-13T01:42:58.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-08-03T23:40:24.000Z (over 8 years ago)
- Last Synced: 2025-10-20T05:55:48.534Z (6 months ago)
- Topics: arc-rpc, clusters, ipc, remote, rpc, spawned
- Language: JavaScript
- Size: 31.3 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Arc RPC
###### Asynchronous Remote Classes make RPC simple
---
## How does it work
Arc RPC allows you to remotely call functions on other processes or even other hardware using these few main concepts
- Ability to wrap existing class instances
- Mock that acts like the remote class
- Bi-directional
- Protocol agnostic
## How to use it
Here is a basic example of using RPC with `socket.io`
`client.js`
```js
// Include library for socket RPC clients
let ClientSocketRpc = require("arc-rpc").ClientSocketRpc
// Define `serverRpc` in higher scope for testing purposes
let serverRpc = null
// Example remotely-callable class (this can be anything)
class ClientClass {
// Example method
async clientTest() {
console.log("Remotely called by server, calling server method.")
// Call remote as if it was a local class instance
await rpc.class.serverTest()
// This is garuanteed to be afterwards, as ES7 awaits are used
console.log("Called remote server method!")
}
}
// Create RPC to server over socket.io socket, predefined encryption key, with an instance of the example client class
serverRpc = new ClientSocketRpc ("127.0.0.1", 9919, Buffer.from ('flbd+mTz8bIWl2DQxFMKHYAA1+PFxpEKmVNsZpFP5xQ=', 'base64'), new ClientClass())
```
`server.js`
```js
// Include library for socket RPC servers
let ServerSocketRpcMaster = require("arc-rpc").ServerSocketRpcMaster
// Example remotely-callable class (this can be anything)
class ServerClass {
async serverTest() {
console.log("Remotely called by client.")
}
}
// Create RPC master/listener, on socket.io connection, predefined encryption key, with an instance of the example server class
let rpcMaster = new ServerSocketRpcMaster (9919, Buffer.from ('flbd+mTz8bIWl2DQxFMKHYAA1+PFxpEKmVNsZpFP5xQ=', 'base64'), new ServerClass())
// Listen for new clients
rpcMaster.on("client", async (clientRpc) => {
console.log("Got new client, remotely calling client test.")
// Call remote as if it was a local class instance
await clientRpc.class.clientTest()
// This is garuanteed to be afterwards, as ES7 awaits are used
console.log("Remotely called client test!")
})
```
## Basic documentation
I'll get to completing this later