2016-05-26 5 views
1

私はこの例(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", 
     }), 
    }) 
+0

私は同じ問題を抱えています。ルーム名ボタンをクリックしても何も起こりません。 –

答えて

0

私は、下記のように私のrouting.pyを変更しようとしました。私はwebsocket_routingに通常のルートとしてカスタムルーティングを含め、それは私のために働き始めた。お役に立てれば。

websocket_routing = [ 
    # Called when WebSockets connect 
    route("websocket.connect", ws_connect), 

    # Called when WebSockets get sent a data frame 
    route("websocket.receive", ws_receive), 

    # Called when WebSockets disconnect 
    route("websocket.disconnect", ws_disconnect),  


    #Custom Routing 
    #Join Chat 
    route("chat.receive", chat_join, command=r'^join$'), 
    route("chat.receive", chat_send, command=r'^send$'), 
] 
関連する問題