Daphne は、ASGI および ASGI-HTTP 用の HTTP、HTTP2、および WebSocket プロトコル サーバーであり、Django チャネルを強化するために開発されました。
プロトコルの自動ネゴシエーションをサポートします。 WebSocket エンドポイントと HTTP エンドポイントを決定するために URL プレフィックスを付ける必要はありません。
Daphne に ASGI アプリケーションを指定し、オプションでバインド アドレスとポート (デフォルトは localhost、ポート 8000) を設定するだけです。
daphne -b 0.0.0.0 -p 8001 django_project.asgi:application
プロキシサーバーの背後で daphne を実行する場合は、UNIX ソケットを使用して 2 つのサーバー間の通信を行うことができます。
daphne -u /tmp/daphne.sock django_project.asgi:application
daphne がプロセスマネージャー内で実行されている場合、親プロセスから渡されたファイル記述子にバインドすることが必要になる場合があります。これを実現するには、 --fd フラグを使用します。
daphne --fd 5 django_project.asgi:アプリケーション
ポート/ソケット バインディングをさらに制御したい場合は、--endpoint (-e) フラグを使用して、Twisted のエンドポイント説明文字列を使用するようにフォールバックできます。このフラグは複数回使用できます。この行は、key.pem と crt.pem が現在のディレクトリに存在すると仮定して、ポート 443 で SSL サーバーを起動します (pyopenssl のインストールが必要です)。
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
エンドポイントでは、 txacme
エンドポイント構文を使用して Let's Encrypt から自動証明書を取得することもできます。詳細については、http://txacme.readthedocs.io/en/stable/ を参照してください。
利用可能なコマンド ライン オプションをすべて表示するには、 -h
フラグを指定して daphne を実行します。
Daphne は、HTTP/2 接続の終了をネイティブにサポートしています。ただし、これを機能させるには、いくつかのことを行う必要があります。まず、Twisted http2
およびtls
エクストラを必ずインストールする必要があります。
pip install -U "Twisted[tls,http2]"
次に、現在のすべてのブラウザーは TLS を使用する場合に HTTP/2 のみをサポートするため、TLS をオンにして Daphne を起動する必要があります。これは、Twisted エンドポイント構文を使用して実行できます。
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
あるいは、 txacme
エンドポイント構文や、内部で TLS を有効にするその他の構文を使用することもできます。
また、 OpenSSL 1.0.2 以降を搭載したシステムを使用する必要があります。 Ubuntu を使用している場合は、少なくとも Ubuntu 16.04 が必要であることを意味します。
Daphne を起動すると、ログに次のことが表示されるはずです。
2017-03-18 19:14:02,741 情報 ssl:port=8000:privateKey=privkey.pem:certKey=cert.pem、チャネル層 django_project.asgi:channel_layer でサーバーを開始しています。 2017-03-18 19:14:02,742 情報 HTTP/2 サポートが有効になりました
次に、HTTP/2 をサポートするブラウザで接続すると、すべてが機能するはずです。 Daphne が提供するログは同一で (結局のところ HTTP です)、ほとんどのブラウザーはネットワーク インスペクター ウィンドウでそれを明らかにしないため、HTTP/2 が動作しているかどうかを判断するのは難しいことがよくあります。動作しているかどうかを明確に知らせるブラウザ拡張機能があります。
Daphne は現時点では HTTP/2 経由の「通常の」リクエストのみをサポートしています。サーバー プッシュなどの拡張機能はまだサポートされていません。ただし、接続が大幅に高速になり、オーバーヘッドが低くなります。
サイトの前に静的ファイルなどを提供するリバース プロキシがある場合、HTTP/2 は、そのプロキシが接続を認識して正しく通過する場合にのみ機能します。
Daphne のルート パス (WSGI SCRIPT_NAME
設定と同等) を設定するには、次の 2 つのオプションがあります。
Daphne-Root-Path
、目的のルート パスを URL エンコードされた ASCII 値として渡します。このヘッダーはアプリケーションに渡されません。--root-path
コマンドライン オプションに、目的のルート パスを URL エンコードされた ASCII 値として設定します。両方が設定されている場合は、ヘッダーが優先されます。 SCRIPT_ALIAS
と同様、値はスラッシュで始まりますが、スラッシュで終わることはできません。例えば:
daphne --root-path=/forum django_project.asgi:application
Daphne には Python 3.9 以降が必要です。
主要なチャネルの貢献ドキュメントを参照してください。
テストを実行するには、パッケージに追加のtests
がインストールされていることを確認してください。
CDダフネ/ pip install -e '.[テスト]' pytest
セキュリティ問題を報告するには、[email protected] までご連絡ください。 GPG 署名とセキュリティ プロセスの詳細については、https://docs.djangoproject.com/en/dev/internals/security/ を参照してください。
バグを報告したり、新機能をリクエストするには、新しい GitHub の問題を開いてください。
このリポジトリは Channels プロジェクトの一部です。シェパードおよびメンテナンス チームについては、メイン チャネルの Readme を参照してください。