問題タブ [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.

0 投票する
1 に答える
1177 参照

django - Websocket と http を同じ (unix) ソケットにリダイレクトするプロキシ

サーバーがリッスンするunixソケットにトラフィックをリダイレクトするための小さなnginx confを作成しましたdaphne(サーバーはに使用されますdjango)。

ドキュメントによると:

すべてのトラフィックに Daphne を使用すると、HTTP と WebSocket の間で自動ネゴシエーションが行われるため、WebSocket を別のポートまたはパスに配置する必要はありません。

したがって、websockets と Http トラフィックの両方を同じ UNIX ソケットにプロキシしたいと思います。

  1. 出来ますか?

  2. どうすればいいですか?

これが私がこれまでに試したことです:

  • ロケーション ブロック内の行のコメントを外すと、ページが空白になります。

  • そうしないと、ページは表示されますが、websockets が機能していないようです。

どうすればこれを解決できますか?

すべてが開発サーバーで正常に動作します。

0 投票する
2 に答える
1570 参照

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 によってリクエストが処理されたとき、ワーカーが処理を開始したとき、処理が終了したとき、インターフェイス サーバーがクライアントに応答を送信したときなど、各フェーズにかかる時間を教えてください。現在、これを解決する方法がわかりません。

0 投票する
1 に答える
1584 参照

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 サーバーに何か問題があるということですか?

0 投票する
2 に答える
23386 参照

django - systemctl の奇妙なエラー: 引数が無効です

これが私のサービスファイルです:

実行すると、次のようsudo systemctl start daphneiになります。

そしての結果systemctl status daphnei.service

どうしたの?Ubuntu Server 16.04 を使用しています。

0 投票する
0 に答える
3565 参照

python - ジャンゴチャネルを介してハートビート/ pingを送信する方法1

Daphne と redis で実行されているDjango チャネルがあります。以前はdjango-websocket-redisを実行していて、すぐにハートビート (ping) メッセージをサポートしていました。私たちのクライアント コードは、アクティブな接続を確認するためにこのハートビートに依存していますが、django では、それがまだアクティブであるかどうかはあまり気にしません。

このため、サーバー側のすべてを追跡する必要はありませんが、ハートビートを送信する必要があります。

チャネルまたはダフネを使用してハートビート/ping メッセージを送信するにはどうすればよいですか? これに関するドキュメントが見つかりません。

django-websocket-redis を使用した古い実装は、"--heartbeat--"n 秒ごとに websocket メッセージを送信するだけです。ドキュメント リファレンス

Daphne が ping を送信するのを読みましたが、どこにも表示されていません。Websocket 接続は開いたままです。