Skip to content

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.