jarpc - Just another python RPC library based on redis pubsub. It is built with aioredis.
Client
,Server
andSlient
connection modes.
Client | Server | Slient | |
---|---|---|---|
Calling commands | yes | no | yes |
Receiving commands | no | yes | yes |
- asyncronous response processing (AsyncIterator).
- encoding customization (marshal (default), json, msgpack, pickle, ...).
Library can be installed from PyPi: pip install jarpc
Or from repository: pip install git+https://github.com/IOMirea/jarpc.git#egg=jarpc
import asyncio
from jarpc import Client
REDIS_HOST = "localhost"
REDIS_PORT = 6379
COMMAND_PING = 0
COMMAND_SLOW_PING = 1
async def main() -> None:
client = Client("example", default_timeout=5, default_expect_responses=1)
asyncio.create_task(client.start((REDIS_HOST, REDIS_PORT)))
await client.wait_until_ready()
print("PING ->", await client.call(COMMAND_PING, {"message": "hello"}))
print("SLOW_PING ->", await client.call(COMMAND_SLOW_PING, timeout=1))
# exit
client.close()
asyncio.run(main())
import os
import asyncio
from jarpc import Server, Request
REDIS_HOST = "localhost"
REDIS_PORT = 6379
COMMAND_PING = 0
COMMAND_SLOW_PING = 1
server = Server("example", node=f"example-{os.getpid()}")
@server.command(COMMAND_PING)
async def ping(req: Request, message: str = "") -> str:
"""Responds with provided message argument or 'pong'."""
return "pong" if message == "" else message
@server.command(COMMAND_SLOW_PING)
async def slow_ping(req: Request) -> str:
"""Responds with 'pong' after 2 seconds, too slow..."""
await asyncio.sleep(2)
return "pong"
server.run((REDIS_HOST, REDIS_PORT))
More examples can be found in examples folder.
- Python >= 3.6
- aioredis
Documentation is available at https://jarpc.readthedocs.io
Source code is available on GitHub: https://github.com/IOMirea/jarpc
Soon
Feel free to open an issue or submit a pull request.
Source code is available under GPL v3.0 license, you can see it here.