HTTP/2 client for tornado
- connect_timeout & request_timeout supporting
- push streams
- h2 & h2c supporting
- auto-reconnect to server with back-off
- stream multiplexing
- stream concurrency negotiating
- SNI supporting in tornado2
- gzip supporting
- flow control support
- DON't reset stream for nginx
- web server, dispatcher, cookie, etc
- HTTP/2 upgrade
- follow redirections
- RST_STREAM in body producer
- RST_STREAM after timeout
- close client connection
- pushed streams as future
- healthy check
- support HTTPRequest.body_producer
- h2>=2.4.0
- tornado>=4.0 or tornado==2.4.1
- CPython>=2.7.10 (not required for h2c, as secure=False)
- certifi for tornado==2.4.1
- backports.ssl_match_hostname for tornado==2.4.1
import tornado.ioloop from tornado.httpclient import HTTPRequest from http2 import SimpleAsyncHTTP2Client client = SimpleAsyncHTTP2Client( host='h2o.examp1e.net', enable_push=True, connect_timeout=1, defaults={'request_timeout': 1} ) resp = tornado.ioloop.IOLoop.instance().run_sync(lambda: client.fetch('/')) print resp for pushed_response in resp.pushed_responses: print pushed_response.effective_url
A big thanks to the great library hyper-h2 from Cory Benfield. :P