Skip to main content

lotrpc: RPC abstraction layer

lotrpc unifies a lot of RPC protocols.

protocols:

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

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
  • 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
  • Golang net/rpc
  • BSON RPC
  • thrift
  • Java RMI

Links

Metadata

Release files for lotrpc 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for lotrpc 0.1.2
File Interpreter ABI Platform Actions
lotrpc-0.1.2-py3-none-any.whl Python 3 none any Details for lotrpc-0.1.2-py3-none-any.whl

Release files / lotrpc-0.1.2-py3-none-any.whl

Download URL lotrpc-0.1.2-py3-none-any.whl
Size 23.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4e4dfb66ae4df361fdb7bb5f238706bfaf5bea6405e2cff300117baae04cc8e8
BLAKE2b-256 checksum
How to use checksums
1f24a9c0a5070fb8bbbd19ea784d8d12978f239f584627b31739283380a59191
Upload date
Uploaded using Trusted Publishing?
What is 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

Security for lotrpc 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.2 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page