Homebrewで入れたnghttp2のPythonモジュールをpyenvのPythonから使う

More than 1 year has passed since last update.

前提

pyenvでpython2をメインで使っているものの、python3の環境も用意している。

nghttp2をPythonモジューツ付きで入れるには

brew install nghttp2 --with-python3

すでにモジュールなしで入れていた場合

brew reinstall nghttp2 --with-python3

pyenvで指定したpythonで使う

以下のコードは、

でnghttp2作者直々のコードを今時のnghttp2に合わせて動くようにしたコードになります。

import ssl
import nghttp2

class Handler(nghttp2.BaseRequestHandler):

    def on_headers(self):
        res = b'nghttp2 FTW\n'
        self.send_response(status=200,
                           #headers = [('content-length', str(len(res)))],
                           headers = [('content-type', 'text/plain')],
                           body=res)

# SSL/TLS を有効にするには, 証明書を server.crt, プライベートキーを server.key ファイルに
# 保存して, 以下 3 行を有効にし, nghttp2.HTTP2Server の ssl パラメータに ctx を指定します.
# ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
# ctx.options = ssl.OP_ALL | ssl.OP_NO_SSLv2
# ctx.load_cert_chain('server.crt', 'server.key')

server = nghttp2.HTTP2Server(('127.0.0.1', 8080), Handler, ssl=None)
server.serve_forever()

PYTHONPATH=/usr/local/lib/python3.5/site-packages python server.py &
nghttp http://127.0.0.1:8080/