Lightweight, modular RPC framework
This repository has been archived on 2022-08-07. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
2022-08-06 22:48:42 -07:00
client Marshal/Unmarshal arguments and return values separately to allow struct tags to take effect for each codec 2022-08-06 22:48:42 -07:00
codec Marshal/Unmarshal arguments and return values separately to allow struct tags to take effect for each codec 2022-08-06 22:48:42 -07:00
examples Propagate context to requests 2022-05-12 17:13:44 -07:00
internal Marshal/Unmarshal arguments and return values separately to allow struct tags to take effect for each codec 2022-08-06 22:48:42 -07:00
server Marshal/Unmarshal arguments and return values separately to allow struct tags to take effect for each codec 2022-08-06 22:48:42 -07:00
.gitignore Add web client 2022-06-02 14:09:27 -07:00
go.mod Set module go version to 1.17 2022-05-07 21:41:51 -07:00
go.sum Add WebSocket server support 2022-05-02 14:47:00 -07:00
LICENSE Initial Commit 2022-05-01 01:39:22 -07:00
lrpc_test.go Marshal/Unmarshal arguments and return values separately to allow struct tags to take effect for each codec 2022-08-06 22:48:42 -07:00
README.md Mention web client in README 2022-06-02 14:14:18 -07:00

lrpc

Go Reference Go Report Card

A lightweight RPC framework that aims to be as easy to use as possible, while also being as lightweight as possible. Most current RPC frameworks are bloated to the point of adding 7MB to my binary, like RPCX. That is what prompted me to create this.


Channels

This RPC framework supports creating channels to transfer data from server to client. My use-case for this is to implement watch functions and transfer progress in ITD, but it can be useful for many things.


Codec

When creating a server or client, a CodecFunc can be provided. An io.ReadWriter is passed into the CodecFunc and it returns a Codec, which is an interface that contains encode and decode functions with the same signature as json.Decoder.Decode() and json.Encoder.Encode().

This allows any codec to be used for the transfer of the data, making it easy to create clients in different languages.


Web Client

Inside client/web, there is a web client for lrpc using WebSockets. It is written in ruby (I don't like JS) and translated to human-readable JS using Ruby2JS. With the bundler gem installed, cd into client/web and run make. This will create a new file called lrpc.js, which can be used within a browser. It uses crypto.randomUUID(), so it must be used on an https site, not http.