1.0.0 • Published 5 years ago

@so-net/rpc v1.0.0

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

RPC

Socket io based websocket rpc

Set up

Server

const http = require('http')
const socketIo = require('socket.io')
const express = require('express')
const parser = require('socket.io-msgpack-parser')
const RPC = requrie('@so-net/rpc/rpc-node')

const app = express()
const httpServer = http.createServer(app)
const ioServer = socketIo(httpServer, {parser})

const server = new RPC.Server({socketServer: ioServer})

server is set and ready to be used

Setting callbacks

server.register('some-event-name', async (arg1, client) => {
  console.log(client.socket.id) // client is server client object (basicly you need only client.socket)
  return arg1 + 'Hello world' // return will be passed to the client
})

Firing event from server (targeted)

const res = await server.fire('event-name', client, arg1)
console.log(res) // res is something returned  from client

Firing event from server (broadcast)

const res = await server.broadcast('event-name', agr1, arg2)
console.log(res) // res = [client1Reply, client2Reply]

Client

Node

const RPC = require('@so-net/rpc/rpc-node')
const client = new RPC.Client({socket: ioClient({parser})})

Web

const RPC = require('@so-net/rpc/rpc-web-client')
const client = new RPC.Client({socket: ioClient({parser})})

Vue plugin

const RPC = require('@so-net/rpc/rpc-web-client')
Vue.use(RPC.VuePlugin, {
  socket: ioClient({parser})
}) 
// window $api will be created
// vm.$api will be created

Setting callbacks

client.register('event-name', async (arg1, arg2) => {
  return  arg1 + arg2
})

Firing events

const res = await client.fire('event-name', arg1, arg2)
console.log(res) // res - server response

Middlewares

Docs for middlewares will be created after they all will be done

Sessions

const session = require("express-session")({ // lookup docs for express-session
	saveUninitialized: true
})
const sharedsession = require("express-socket.io-session") // lookup docs for express-socket.io-session
app.use(session)
ioServer.use(sharedsession(session))
server.register('event-name', async (data, client) => {
   let session = client.socket.handshake.session
   ...
})

You can use any implementation of sessions for socket.io and/or express

To be done

  • Add all middlewares (50% done)
  • E2E crypto via configuration
  • Set of ready to use middlewares (like logger, etc)