2016-07-12 6 views
2

Ich versuche, Django-Kanäle durch die Dokumente zu implementieren.
So wie die Dokumentation machen consumers.py ich binDjango Kanäle websocket.receive wird nicht behandelt

def ws_message(message): 
    message.reply_channel.send({ 
     "text": message.content['text'], 
}) 

und routing.py als

from channels.routing import route 
from my_proj.consumers import ws_message 

channel_routing = [ 
    route("websocket.receive", ws_message), 
] 

In meiner settings Datei hinzugefügt ich channel_layers

CHANNEL_LAYERS = { 
    "default": { 
     "BACKEND": "asgi_redis.RedisChannelLayer", 
     "CONFIG": { 
      "hosts": [("localhost", 6379)], 
     }, 
     "ROUTING": "my_proj.routing.channel_routing", 
    }, 
} 

Also, wenn ich Runserver und in Chromkonsole senden Sie die folgenden

socket = new WebSocket("ws://" + 192.168.4.177:8000"); 
socket.onmessage = function(e) { 
    alert(e.data); 
} 
socket.onopen = function() { 
    socket.send("something"); 
} 

ich in manage.py Konsole sehen kann, dass bearbeitetes verbinden WebSocket und die Verbindung hergestellt ist, aber der receive Teil nicht behandelt wird und nicht in der Konsole so Alarm aus js Code gesehen wird nicht erhoben. Was mache ich falsch?

+0

@UtkarshSinha das hat keine Wirkung. Wieder kann ich die Verbindung aber nicht den Empfang sehen. – arminrock

+0

Versuchen Sie, die Daten im JSON-Format zu senden. Ich denke, es ist wahrscheinlich nicht in der Lage, "Text" aus der Nachricht, wie folgt zu wählen: socket.send (JSON.stringify ({"text": "etwas"})); –

+0

@UtkarshSinha Ich habe versucht, wieder kein Glück. Um es noch einmal zu sagen. Ich denke nicht, dass es ein Problem ist, 'Text' auszuwählen (hauptsächlich, weil das Beispiel aus Channels-Dokumenten stammt). Sie sehen, in einer Konsole von 'manage.py runworker v2' sehe ich' 'runworker - websocket.receive'' debugging msg. Das Senden geht nicht an den Verbraucher. – arminrock

Antwort

6

Das Problem war mit der Version von Twisted. Inzwischen ist die neueste Version 16.3.0, aber die Channels erfordern 16.2.0 Version. Also mit 16.2.0 Version von Twisted funktioniert es wie es sollte.

+0

Verlor 2h meines Lebens auf dieses Problem, ich stufte auf 16.2.0 herunter und es fing an zu arbeiten. Vielen Dank für die Antwort! –

+0

Mein Tag gerettet! Danke vielmals :) – cwirz