RPC abstraction layer
Project description
lotrpc: RPC abstraction layer
lotrpc unifies a lot of RPC protocols.
protocols:
- XML-RPC http://xmlrpc.scripting.com/
- JSON RPC https://www.jsonrpc.org/specification
- MessagePack RPC https://msgpack.org/
- gRPC https://grpc.io/
- ZeroRPC https://www.zerorpc.io/
One RPC to rule them all, One RPC to find them, One RPC to bring them all, and in the darkness bind them.
install
- python -m venv your-dir
- cd your-dir
- ./bin/pip install lotrpc
install head
- python -m venv your-dir
- cd your-dir
- ./bin/pip install -r https://github.com/wtnb75/lotrpc/raw/master/requirements.txt
- ./bin/pip install -e "git+https://github.com/wtnb75/lotrpc.git#egg=lotrpc"
Usage
client-server example
- xmlrpc
- ./bin/python -m lotrpc.clsrv server xml
- ./bin/python -m lotrpc.clsrv client xml
- ./bin/python -m lotrpc.clsrv benchmark xml --filter 'name!~process'
- json-rpc
- ./bin/python -m lotrpc.clsrv server json
- ./bin/python -m lotrpc.clsrv client json
- curl -X POST -d '{"method":"hello", "jsonrpc":"2.0", "params":["a","b","c"]}' http://localhost:9999/
- ./bin/python -m lotrpc.clsrv benchmark json
- curl -X POST -d '{"method":"hello", "jsonrpc":"2.0", "params":["a","b","c"]}' http://localhost:9999/
- msgpack-rpc
- ./bin/python -m lotrpc.clsrv server msgpack
- ./bin/python -m lotrpc.clsrv client msgpack
- ./bin/python -m lotrpc.clsrv benchmark mp --filter 'name!~process'
- ./bin/python -m lotrpc.clsrv benchmark msgpack --filter 'name=sync'
- msgpack-rpc with mprpc
- ./bin/python -m lotrpc.clsrv server mp
- ./bin/python -m lotrpc.clsrv client mp
- ./bin/python -m lotrpc.clsrv benchmark mp --filter 'name!~process'
- ./bin/python -m lotrpc.clsrv benchmark msgpack --filter 'name=sync'
- grpc
- ./bin/python -m lotrpc.clsrv server grpc --options '{"source":"examples/grpc/hello.proto"}'
- ./bin/python -m lotrpc.clsrv client grpc --options '{"source":"examples/grpc/hello.proto"}' --method Greeter.SayHello --params '{"name":"xyzxyz"}'
- ./bin/python -m lotrpc.clsrv benchmark grpc --options '{"source":"examples/grpc/hello.proto"}' --method Greeter.SayHello --params '{"name":"xyzxyz"}' --filter 'name!~process'
- zerorpc
- ./bin/python -m lotrpc.clsrv server zero
- ./bin/python -m lotrpc.clsrv client zero
- ./bin/zerorpc --json tcp://localhost:9999 hello '{"hello":"world"}'
- ./bin/python -m lotrpc.clsrv benchmark zero --filter 'name!~process'
client usage (CLI)
# ./bin/python -m lotrpc.clsrv
Usage: clsrv.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
benchmark start benchmark client
client serialized client
client-async client with asyncio
client-pool client with thread pool
client-ppool client with process pool
listmode list rpc mode
proxy start proxy server
proxy-auth start proxy with authentication example
server start server
# ./bin/python -m lotrpc.clsrv client --help
Usage: clsrv.py client [OPTIONS] [MODE] [ADDR]
serialized client
Options:
--options TEXT
--num INTEGER
--method TEXT
--params TEXT
--verbose / --no-verbose
--help Show this message and exit.
# ./bin/python -m lotrpc.clsrv client json http://localhost:9999/endpoint --method hello --params '{"hello":"world"}'
# nc -l 9999
POST /endpoint HTTP/1.1
Host: localhost:9999
User-Agent: python-requests/2.21.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
content-type: application/json
Content-Length: 76
{"method": "hello", "params": {"hello": "world"}, "jsonrpc": "2.0", "id": 0}
client usage (Python)
import lotrpc
# JSON RPC
cl = lotrpc.json.Client("http://localhost:9999/endpoint")
# XML-RPC
cl = lotrpc.xml.Client("http://localhost:9999/endpoint")
# MessagePack-RPC
cl = lotrpc.msgpack.Client("http://localhost:9999/endpoint")
# ZeroRPC
cl = lotrpc.zero.Client("http://localhost:9999/endpoint")
## call it
res = cl.call("hello", {"hello": "world"})
print(res)
server(dispatcher) usage (Python)
import lotrpc
class HelloDispatcher(lotrpc.SimpleDispatcher):
def do_hello(self, params):
return {"result": "OK1"}
def do_goodbye(self, params):
return {"result": "OK2"}
# JSON RPC
srv = lotrpc.json.Server("http://localhost:9999/endpoint")
# XML-RPC
srv = lotrpc.xml.Server("http://localhost:9999/endpoint")
# MessagePack-RPC
srv = lotrpc.msgpack.Server("http://localhost:9999/endpoint")
# ZeroRPC
srv = lotrpc.zero.Server("http://localhost:9999/endpoint")
## serve it
srv.serve(HelloDispatcher())
proxy
- (client) -> xmlrpc -(proxy)-> jsonrpc (server)
- ./bin/python -m lotrpc.clsrv proxy xml http://localhost:9999/ json http://localhost:9998/
- ./bin/python -m lotrpc.clsrv server json http://localhost:9998/
- ./bin/python -m lotrpc.clsrv client xml http://localhost:9999/
does not work...
- client
- grpc + process pool
- msgpack + process pool
- xml + process pool
- zero + process pool
- aioxml + thread pool, process pool, asyncio
- aiojson + thread pool, process pool, asyncio
- client-server
- server=mp, client=msgpack
- server cannot work async
- aioxml
- aiojson
- zero
- xml
- mp
TODO
- Work in Progress
- Sun RPC
- (for test) ./bin/python -m lotrpc.rpcgen
- Sun RPC
- Golang net/rpc
- BSON RPC
- thrift
- Java RMI
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
lotrpc-0.1.2-py3-none-any.whl
(23.7 kB
view details)
File details
Details for the file lotrpc-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: lotrpc-0.1.2-py3-none-any.whl
- Upload date:
- Size: 23.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.8.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e4dfb66ae4df361fdb7bb5f238706bfaf5bea6405e2cff300117baae04cc8e8 |
|
MD5 | 8ccb19674d4512c35c5f1e9009d11193 |
|
BLAKE2b-256 | 1f24a9c0a5070fb8bbbd19ea784d8d12978f239f584627b31739283380a59191 |