Skip to main content

aioh2

https://img.shields.io/pypi/v/aioh2.svg https://img.shields.io/travis/decentfox/aioh2.svg Documentation Status

HTTP/2 implementation with hyper-h2 on Python 3 asyncio.

Features

  • Asynchronous HTTP/2 client and server

  • Multiplexing streams of data with managed flow and priority control

  • Optional tickless health check

  • More to come

Non-features:

  • Request/Response wrappers

  • Web server, dispatcher, cookie, etc

  • HTTP/2 upgrade

Example

A server saying hello:

# Server request handler
async def on_connected(proto):
    try:
        while True:
            # Receive a request from queue
            stream_id, headers = await proto.recv_request()

            # Send response headers
            await proto.start_response(stream_id, {':status': '200'})

            # Response body starts with "hello"
            await proto.send_data(stream_id, b'hello, ')

            # Read all request body as a name from client side
            name = await proto.read_stream(stream_id, -1)

            # Amend response body with the name
            await proto.send_data(stream_id, name)

            # Send trailers with the length of the name
            await proto.send_trailers(stream_id, {'len': str(len(name))})
    except asyncio.CancelledError:
        # do cleanup here
        pass

# Start server on random port, with maximum concurrent requests of 3
server = await aioh2.start_server(on_connected, port=0, concurrency=3)
port = server.sockets[0].getsockname()[1]

And a client to try out:

# Open client connection
client = await aioh2.open_connection('0.0.0.0', port,
                                     functional_timeout=0.1)

# Optionally wait for an ack of tickless ping - a.k.a. until functional
await asyncio.sleep(0.1)  # simulate client being busy with something else
rtt = await client.wait_functional()
if rtt:
    print('Round-trip time: %.1fms' % (rtt * 1000))

# Start request with headers
stream_id = await client.start_request(
    {':method': 'GET', ':path': '/index.html'})

# Send my name "world" as whole request body
await client.send_data(stream_id, b'world', end_stream=True)

# Receive response headers
headers = await client.recv_response(stream_id)
print('Response headers:', headers)

# Read all response body
resp = await client.read_stream(stream_id, -1)
print('Response body:', resp)

# Read response trailers
trailers = await client.recv_trailers(stream_id)
print('Response trailers:', trailers)

client.close_connection()
await asyncio.sleep(.1)

Above example can be found at examples/core.py.

Credits

A big thanks to the great library hyper-h2 from Cory Benfield.

DecentFoX Studio is a software outsourcing company delivering high-quality web-based products and mobile apps for global customers with agile methodology, focusing on bleeding-edge technologies and fast-developing scalable architectures.

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

History

0.2.1 (2017-12-03)

  • Updated to h2 3.0 (Contributed by Arthur Darcet and Peter Wu)

  • Dropped support for Python 3.3

0.1.0 (2016-2-6)

  • First release on PyPI.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aioh2-0.2.3.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aioh2-0.2.3-py2.py3-none-any.whl (11.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file aioh2-0.2.3.tar.gz.

File metadata

  • Download URL: aioh2-0.2.3.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.13

File hashes

Hashes for aioh2-0.2.3.tar.gz
Algorithm Hash digest
SHA256 9f6ed71db16c410abf74dbe900def8f11429ba19edcf1037b865fc03668d3bd7
MD5 a5328a717592a1d8e2be186aa12cd3da
BLAKE2b-256 c2925f598d7475bc1df25d87614b5ad74bd20d2db2fc78270d30c9b1568939c8

See more details on using hashes here.

File details

Details for the file aioh2-0.2.3-py2.py3-none-any.whl.

File metadata

  • Download URL: aioh2-0.2.3-py2.py3-none-any.whl
  • Upload date:
  • Size: 11.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.13

File hashes

Hashes for aioh2-0.2.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a4d09801b46a6cc9101d6c97e1886428469db10aaa2736a45fa89d0467c75821
MD5 e32b84a095e54a6e3711c29105575487
BLAKE2b-256 f704d66eb5b20378bcb91f5b58b20fc7d5bddb4c6cec2b0892530ad7fca69416

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.3 This release

2 files

0.2.2

1 file

0.2.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page