私はこの例(https://github.com/andrewgodwin/channels-examples/blob/master/multichat/chat/routing.py)に基づいてチャットアプリケーションを構築しています。 JavaScriptが実行されると(ソケットが既に開いている、ws_connectはすでに実行されています)、JSONをwebsocketに送信します。この'メッセージ'は、ws_receiveにルーティングされ、JSONが 'payload'変数にロードされます。 「メッセージ」reply_channelがペイロード変数(dict)に追加されます。 Channelsコマンドを使用してペイロードが送信され、chat_joinにルーティングされます。ここで、ハードコードされたmessage.reply_channel.sendが実行されます。Djangoチャンネル - 内部カスタムルーティングが機能しない
payload['reply_channel'] = message.content['reply_channel']
作業罰金までのすべてのステップアップ。しかし、ペイロードはchat_joinコンシューマにルーティングされていません。正しくルーティングされている場合は、reply_channel値が正しく読み取られていないため、メッセージがクライアントに返送されません。
ここでは破裂点を見つけることはできないようです。このコードを修正するのに役立つ必要があります。
の.js
//Join Room
socket.send(JSON.stringify({
"command": "join",
"room": "102"
}));
routing.py
from channels.routing import route
from MyProject.consumers import ws_connect, ws_receive, chat_join
websocket_routing = [
route("websocket.connect", ws_connect),
route("websocket.receive", ws_receive),
]
custom_routing = [
route("chat.receive", chat_join, command=r'^join$'),
]
consumers.py
from channels import Channel
def ws_receive(message):
payload = json.loads(message['text'])
payload['reply_channel'] = message.content['reply_channel']
Channel("chat.receive").send(payload)
def chat_join(message):
message.reply_channel.send({
"text": json.dumps({
"alpha": "1",
"beta": "2",
}),
})
私は同じ問題を抱えています。ルーム名ボタンをクリックしても何も起こりません。 –