問題タブ [daphne]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - Websocket と http を同じ (unix) ソケットにリダイレクトするプロキシ
サーバーがリッスンするunixソケットにトラフィックをリダイレクトするための小さなnginx confを作成しましたdaphne
(サーバーはに使用されますdjango
)。
ドキュメントによると:
すべてのトラフィックに Daphne を使用すると、HTTP と WebSocket の間で自動ネゴシエーションが行われるため、WebSocket を別のポートまたはパスに配置する必要はありません。
したがって、websockets と Http トラフィックの両方を同じ UNIX ソケットにプロキシしたいと思います。
出来ますか?
どうすればいいですか?
これが私がこれまでに試したことです:
ロケーション ブロック内の行のコメントを外すと、ページが空白になります。
そうしないと、ページは表示されますが、websockets が機能していないようです。
どうすればこれを解決できますか?
すべてが開発サーバーで正常に動作します。
python - django チャネルのプロファイルを作成するには?
私のテクノロジー スタックは、チャネル バックエンドとしての Redis、データベースとしての Postgresql、ASGI サーバーとしての Daphne、アプリケーション全体の前の Nginx です。すべてが Docker Swarm を使用してデプロイされ、Redis とデータベースのみが外部に配置されます。約 20 の仮想ホストがあり、20 のインターフェイス サーバー、40 の http ワーカー、および 20 の websocket ワーカーがあります。ロード バランシングは、Ingress オーバーレイ Docker ネットワークを使用して行われます。
問題は、パフォーマンスに関して非常に奇妙なことが時々起こることです。ほとんどのリクエストは 400 ミリ秒未満で処理されますが、負荷が非常に小さい場合でも、リクエストに最大 2 ~ 3 秒かかることがあります。Django デバッグ ツールバーまたはミドルウェア ベースのプロファイラーを使用してワーカーをプロファイリングすると、何も表示されません (タイミング 0.01 秒程度)。
私の質問: django-channels を使用してリクエスト パス全体をプロファイリングする良い方法はありますか? Daphne によってリクエストが処理されたとき、ワーカーが処理を開始したとき、処理が終了したとき、インターフェイス サーバーがクライアントに応答を送信したときなど、各フェーズにかかる時間を教えてください。現在、これを解決する方法がわかりません。
django - Django Channels Worker が websocket.connect に応答しない
django チャネルに問題があります。Daphne は WebSocket CONNECT リクエストを適切に受け入れますが、ワーカーはconsumer.pyで指定されたメソッドでリクエストに応答しません。問題は、これがほとんどの場合にのみ発生することです。時々、 consumers.pyのメソッドで応答しますが、ほとんどの場合、ワーカーはまったく応答しません。vagrant (trusty64) 環境では正常に動作する重複コードがありますが、実際の trusty64 マシンではコードがそのように動作します。アプリをホストする trusty64 マシンでは、他のアプリケーションも実行されていることに注意してください (約 4 つのアプリが同時に実行されています)。
私はこのように設定されたrouting.pyを持っています
対応するconsumer.pyは次のようになります
そして、このようなsettings.pyのいくつかのチャンネル関連の行
別の質問を参照して、このようにdaphneとworkerを実行してみました
ダフネとワーカーのログをキャプチャしました。次のようになります
ダフネ ログ :
対応するワーカーログ:
WSCONNECT イベントが発生したときにわかるように、ワーカーはそれに応答しません。
Twisted を 16.2 にダウングレードすることで解決されたこの問題に近い別の質問がありますが、私にはうまくいきません。
2017 年 1 月 3 日更新
nginx、supervisor、gunicorn、およびdaphneに同じコードと同じ設定を使用しているにもかかわらず、ローカルのvagrantマシンで問題を再現できません。redisの代わりにIPCを使用して動作するように、チャネルレイヤーの設定を変更してみました。設定は次のとおりです。
ただし、IPC に比べてスケーリングが容易なため、Redis チャネル レイヤーを使用するつもりであるため、これは現在の問題を解決しません。これは、私の redis サーバーに何か問題があるということですか?
django - systemctl の奇妙なエラー: 引数が無効です
これが私のサービスファイルです:
実行すると、次のようsudo systemctl start daphnei
になります。
そしての結果systemctl status daphnei.service
:
どうしたの?Ubuntu Server 16.04 を使用しています。
python - ジャンゴチャネルを介してハートビート/ pingを送信する方法1
Daphne と redis で実行されているDjango チャネルがあります。以前はdjango-websocket-redisを実行していて、すぐにハートビート (ping) メッセージをサポートしていました。私たちのクライアント コードは、アクティブな接続を確認するためにこのハートビートに依存していますが、django では、それがまだアクティブであるかどうかはあまり気にしません。
このため、サーバー側のすべてを追跡する必要はありませんが、ハートビートを送信する必要があります。
チャネルまたはダフネを使用してハートビート/ping メッセージを送信するにはどうすればよいですか? これに関するドキュメントが見つかりません。
django-websocket-redis を使用した古い実装は、"--heartbeat--"
n 秒ごとに websocket メッセージを送信するだけです。ドキュメント リファレンス
Daphne が ping を送信するのを読みましたが、どこにも表示されていません。Websocket 接続は開いたままです。