Skip to main content

Asyncio bindings for libnghttp2 based on ctypes

Project description

PyPi Version Build Status Code Coverage Documentation Status

pynghttp2 are simple asyncio Python bindings based on ctypes for the nghttp2 library. The only thing you need is a libnghttp2 version on your system.

On Debian-based systems you can install nghttp2 simply via apt:

apt-get install libnghttp2-14

The project was created in the context of a student work for an HTTP/2 protocol gateway in the µPCN project - an implementation of Delay-tolerant Networking (DTN) protocols.

Installation

pip install pynghttp2

Examples

High-Level API

from pynghttp2 import http2

# GET request
resp = await http2.get('http://localhost:64602/ping')

content = await resp.text()
assert content == 'pong'

# POST request
message = b"Lorem ipsum dolorem"
resp = await http2.post('http://localhost:64602/echo', data=message)
echo = await resp.read()
assert echo == message

Client Session

from pynghttp2 import ClientSession

# Multiplex two requests
async with ClientSession(host='localhost', port=64602) as session:
    stream1 = session.get('http://localhost:64602/stream')
    stream2 = session.get('http://localhost:64602/stream')

    await asyncio.gather(stream1.read(), stream2.read())

Server Session

import asyncio
from pynghttp2 import ServerSession

async def handle_request(req):
    """Echo the request body"""
    msg = await req.read()
    await req.response(200, data=msg)

with ServerSession(host='localhost', port=8080) as session:
    while True:
        # Wait for next incoming request
        req = await session

        # Handle each request in its own task to be able to multiplex
        # multiple requests and responses
        asyncio.ensure_future(handle_request(req))

Project details


Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
pynghttp2-0.3.1.tar.gz (21.8 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page