問題タブ [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 チャネルの WebSocketProtocol エラー
チャネルを使用して django のインスタンスを立ち上げようとしています。django runserver を使用してデータを localhost にサーバーすることができる開発環境に正常にデプロイされました。私の製品環境では、mod_proxy_wstunnel を有効にして、apache を proxypass サーバーとして使用しています。サーバーは正常に起動しますが、ブラウザーで開くと、runserver コンソールに次のエラーが表示されます。
関連するApache構成は次のとおりです。
http_protocol ファイルで問題を特定しようとしましたが、プロトコル オブジェクトに関連しているようです。ここで何が欠けていますか?
javascript - Django チャネル - Echo の例が機能しない
ドキュメント サイトの指示に従っていますが、echo の例で行き詰まりました。Websocket は正しく作成され、サーバーに接続されていますが、サーバーに何かを送信しても応答がありません (例ではソケットに送信したのと同じメッセージを含むアラートウィンドウが表示されるはずですが、console.logのアラートを変更しましたが、表示されません)、何が間違っていますか?
settings.pyで:
routing.pyで:
consumer.pyで:
asgi.py で
次に実行します: python manage.py runserver、ブラウザでサーバーの URL に移動し、コンソールに次のように入力します。
繰り返しますが、この時点で警告ウィンドウ (または console.log メッセージ) が表示されるはずですが、何も表示されません。
私が行ったリクエストのステータスは保留中です(ただし、ここを読み、最初のコメントではそれが正常であると述べています)
サーバー出力は次のようになります。
ブラウザーで websocket を介して何かを送信しようとするたびに、サーバーは CONNECT を出力するだけですが、js コンソールからのログは表示されません。
編集: ブラウザーで websocket を echo.websocket.org に対してテストしたところ、期待どおりの答えが得られました。
django - Django Channels コードは Chrome では機能しますが、Firefox では機能しません
Django と Channels (Django の新しい websocket 実装) を使用してチャット アプリケーションを作成しています。ユーザーは最初に待合室に入り、他に 3 人以上が参加すると、チャット ルームに誘導されます。コードは Chrome では問題なく動作しますが、Firefox では正しく動作しません。仕組みは次のとおりです。
- チャネル/Websocket への新しい接続時に、サーバーは少なくとも 3 人が待合室 (consumers.py) にいるかどうかを確認します。
- 少なくとも 3 人が存在する場合、グループ機能を使用して、リダイレクトするように伝えるメッセージをチャネル/Websock にブロードキャストします。
- メッセージはクライアントによって受信され、javascript でリダイレクトを実行します。
問題をデバッグするために私が取った手順は次のとおりです。
- このコードは、Firefox 以外のブラウザー (Chrome など) でも機能します。
- このコードは、待合室に到着した最初の 2 つのクライアントが Firefox で、最後の (サーバーをトリガーする) クライアントが Chrome である場合に機能します。3 つのクライアントすべてをリダイレクトします。
- 最初の 2 つのクライアントが Chrome で、最後のクライアント (サーバーをトリガーする) が Firefox の場合、Chrome クライアントはリダイレクトされますが、Firefox クライアントはリダイレクトされません。
- コードを単純な警告メッセージ (クライアントが Group ステートメントを受信したとき) に置き換えることも Firefox では機能しない (ただし、Chrome では機能する) ため、リダイレクトを実行する JavaScript に問題がある可能性は低いです。サーバーをトリガーするのがクライアントである場合、Firefox クライアントはグループ メッセージをまったく受信しないかのようです。
- チャットはチャネルを使用し、Firefox を含むすべてのブラウザーで動作します。正常に接続し、メッセージを送信し、メッセージを受信し、切断します。
これらのデバッグ手順に基づいて、Firefox がグループ リダイレクトを実行するサーバー コードを起動するときに、何か問題が発生していると思います。何がうまくいかないのかについて何か提案はありますか? 問題の特定に役立つ提案はありますか?
問題を引き起こしていると思われる consumer.py のコードは次のとおりです。
リダイレクトを実行している JavaScript コードは次のとおりです。
python - Django チャンネルの websocket.receive が処理されない
ドキュメントを参照して Django チャネルを実装しようとしています。
私が作っているドキュメントのようにconsumers.py
そしてrouting.py
_
settings
追加したファイルにchannel_layers
したがって、サーバーを実行し、クロムコンソールで次を送信すると
Websocket接続が機能し、接続が確立されていることをmanage.pyコンソールで確認できますが、そのreceive
部分は処理されず、コンソールに表示されないため、jsコードからのアラートは発生しません。それで、私は何を間違っていますか?
django - Django REST フレームワークと Django Channels がうまく動作するようにする
Django REST フレームワークを Web ソケットで動作させたいと思っていて、Django Channels に出会いました。REST フレームワークの上にチャネルを構築できますか?
私はここでそれがWIPであることを読みましたが、2つを結びつける簡単な「軽い」方法があるかどうか疑問に思っていました. アドバイスをいただければ幸いです。私はまだ Django に慣れていません。
django - Django Channel Web ソケット - Model.objects にメッセージを追加
最近、Web ソケットを Django に統合する方法を調査しています。ドキュメントによると、Channelsを使用するのが最善の方法です。
例示的なモデルクエリが与えられた場合
Web アプリケーションを Web ソケット サーバーに接続したいと考えています。Web ソケット サーバーは、メッセージを受信すると、クライアントによって確立されたソケット接続の特定のサブセットにそのメッセージをブロードキャストする必要があります。
クライアント (つまり、Web ブラウザー) は、ブロードキャストされたメッセージを受信すると、それをRequest.objectsに追加する必要があります。それ以降、すべてのクエリのリストは、Django テンプレートとその中で定義されたモデルを使用して自動的に更新される必要があります。ユーザーが明示的に更新する必要はありません。
したがって、私の質問は次のとおりです。(I) Channels を使用する場合 (これが Django で Web ソケット接続を処理するための推奨される方法である場合)、新しく到着したQueryオブジェクトをQuery.objectsに追加するにはどうすればよいですか?オブジェクトをデータベースに保存する必要はありません。 Web ソケット サーバーに送信する前に既に挿入されているため、(II) 対応する Django テンプレートのコンテンツを更新します。
python - Daphne サーバーが HTTPS 上の WebSocket に接続できない
Openshift クラウドに Django プロジェクトをデプロイしています。このプロジェクトは、チャネルと Websockets を使用して、非同期で動作するようにします。問題は、ブラウザからサーバー側で実行している Daphne サーバーに Websocket を正常に接続できないことです。
私はdjango(python2.7)とredisカートリッジを使用して実行しています。
私が使用している post_deploy スクリプトは次のようになります。
これが私のDjango構成です。settings.pyで:
routing.pyで:
consumer.pyで。
クライアント側では、次のコードを実行しています。
このドキュメントのために、Daphne 設定と WebSockets 設定でポート 8443 を使用していることに注意してください。また、Openshift では 0.0.0.0 にバインドできないため、Daphne は OPENSHIFT_HOST アドレスにバインドされます (権限の問題)。
出力は次のようになります。
クライアント側ではすべて問題ないように見えますが、覚えていれば、consumers.pyには次のようなものがありました。
したがって、私の端末では、サーバーは次のようなものを出力する必要があります: "受信: から" しかし、そうではありません。ここで何が欠けていますか?
tl;dr: クライアント側の websocket は正しく接続されているように見えますが、サーバーはそれを確認するメッセージを出力していません。