Async
Async dispatch is supported.
from jsonrpcserver import method, Success, async_dispatch
@method
async def ping() -> Result:
return Success("pong")
await async_dispatch('{"jsonrpc": "2.0", "method": "ping", "id": 1}')
Some reasons to use this:
- Use it with an asynchronous protocol like sockets or message queues.
await
long-running functions from your method.- Batch requests are dispatched concurrently.
Notifications
Notifications are requests without an id
. We should not respond to
notifications, so jsonrpcserver gives an empty string to signify there is no
response.
>>> await async_dispatch('{"jsonrpc": "2.0", "method": "ping"}')
''
If the response is an empty string, don't send it.
if response := dispatch(request):
send(response)
A synchronous protocol like HTTP requires a response no matter what, so we can
send back the empty string. However with async protocols, we have the choice of
responding or not.