問題タブ [django-channels]
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.
python - カスタム コマンドでの Django チャネルとのデータ バインディング
Django チャネルで作業を開始します。モデル デバイスのバインド データが必要です。私がやる。管理インターフェイスでデバイス オブジェクトを変更すると、クライアント (Web ブラウザー) での変更に関するメッセージが表示されますが、カスタム django 管理コマンドを使用して単純な WebsocketServer も実行します。また、カスタム コマンド プロセスで Device-object が変更された場合、クライアントにメッセージが表示されません。どうすれば修正できますか?
devices/models.py
デバイス/databinding.py
プロジェクト/ルーティング.py
devices/consumers.py
カスタム autobahn WebSockerServer を実行する単純なカスタム コマンド。
プロジェクト/管理/コマンド/runcustomcommand.py
プロジェクト/websocketserver/autobahn_server.py
クラス WebSocketServer(オブジェクト):
クライアントの接続 (js コード):
走る:
アップデート
管理コマンドの先頭にこのコードを追加すると、オブジェクトに対するその後の変更がクライアントに送信されることを偶然発見しました。
ある種の初期化のようなものです。しかし、それは奇妙です。
python - django-channels で websocket.receive コンシューマを待機しています
django-channelsを使用してクライアントに何かを送信した後、クライアントからの応答を待つ方法は?
関数Group.send()
から呼び出されsend_to_client()
、クライアントがメッセージを受信すると、チャネルsend_to_client()
で受信されたクライアントからの応答が返されることを期待しています。websocket.receive
response_msg
insend_to_client()
関数を返す方法はありますか?
今ここにたどり着きました
Sample Code for consumers.py:
したがって、メッセージがクライアント側に到達すると、クライアントはサーバーに応答を返します。これは、ファイルで定義されているチャネルをws_receive(message)
介して関数によって受信されます。websocket.receive
urls.py
私の関数がこのようになるようにこれを行う方法はありますか?
django - Django チャネルは 3 つのワーカーを実行しますが、これは正常ですか?
ドキュメントhttps://channels.readthedocs.io/en/stable/getting-started.htmlを使用して、チャネルを使用してdjangoプロジェクトを非常に簡単にセットアップしました
設定:
rounding.py で:
そして、私が実行すると:
それは印刷します:
そして、3 人の作業員は何かがおかしいようですが、それは正常ですか? しかし、他のすべては正常に機能します。
アドバイスのための大きなthx
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 によってリクエストが処理されたとき、ワーカーが処理を開始したとき、処理が終了したとき、インターフェイス サーバーがクライアントに応答を送信したときなど、各フェーズにかかる時間を教えてください。現在、これを解決する方法がわかりません。
python-3.x - ImportError:「asgiref.base_layer」という名前のモジュールがありません
https://blog.heroku.com/in_deep_with_django_channels_the_future_of_real_time_apps_in_djangoの django チャネルの例を試していましたが、コマンドdaphne chat.asgi:channel_layer --port 8888 that ImportError: No module named 'asgiref.base_layer'を実行するとエラーがスローされます。この例に必要なすべてのパッケージを既にインストールしています。以下は、requirements.txt ファイルです。
redis-server 3.2.6 と python 3.5.2 を使用しています
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 - 追加データを Django データベースに保存する
私は Django Channels を使用しており、追加のフィールドをjson
投稿のデータとともにデータベースに保存できるようにしたいと考えています。
モデルに、ユーザー モデルのフィールドPostmie
を指す外部キーがあります。投稿をデータベースに保存するモデルです。外部キーは、 というフィールドを作成します。投稿をデータベースに保存しているときに、投稿を行っているユーザーの電子メールも取得して、データベースにも保存したいと考えています。どうすればこれを行うことができますか?私は Django フォームを使用していません。email
Postmie
email_id
私のモデルは、ここにあるPostmie
Django Channels チュートリアルのモデルと同じです。唯一の違いは、私のモデルには、私のユーザー モデルのメール フィールドを指す追加の外部キーがあることです。Post
email=request.user.email
動作しません。電子メールを非表示のフィールドに入れることを考えていましたが、それは安全ではないようです。
私が使用している方法は、ここ consumers.py
にある Django Channels チュートリアルの方法と実質的に同じです。すべてが機能しますが、投稿用のデータベースに他のフィールドを入力できません。
ポストミー モデル:
django - Django チャネルと docker-compose エラー
docker および docker-compose を介して runserver を実行すると、次のエラーが発生し、django に接続できません。
ローカルで実行すると、すべて正常に実行されます。これが私のrequirements.txtです:
Django==1.10.4 psycopg2==2.6.2 チャンネル==0.17.3 asgi-redis==1.0.0
そして、これが私のdocker-composeファイルです:
何か案は?