2016-12-23 5 views
0

Warten auf eine Antwort vom Client nach dem Senden des Clients etwas mit Django-Kanälen?Warten auf websocket.receive consumer in django-channels

Immer dann, wenn von der Funktion Group.send()send_to_client() und nach dem Empfang der Nachricht durch den Client aufgerufen wird, wird send_to_client() eine Antwort zurück von dem Client erwartet, die auf websocket.receive Kanal empfangen zu werden.

Gibt es eine Möglichkeit, die response_msg in send_to_client() Funktion zurückzugeben?

Jetzt habe ich erreicht here

Sample Code for consumers.py:

def ws_receive(message): 
    response_msg = message.content['text'] 
    return response_msg 

def send_to_client(param1, param2, param3): 
    Group.send({ 
     "text" : json.dumps({ 
     "First" : param1, 
     "Second" : param2, 
     }) 
    }) 

Also, wenn die Nachricht auf der Clientseite erreicht, wird der Client mit dem Server eine Antwort zurückschicken, die durch die ws_receive(message) Funktion empfangen werden durch der websocket.receive Kanal, der in der urls.py Datei definiert ist,

channel_patterns = [ 
    route("websocket.receive", ws_receive), 
    ... 
] 

Gibt es eine Möglichkeit dies zu tun, damit meine Funktion so aussieht?

def send_to_client(...): 
    Group.send(...) 
    response_msg = #response message from client 

Antwort

2

Da Sie über eine websocket sind recieving, ich bin nicht sicher, ob Sie sagen, wäre in der Lage, selbst wenn die recieving Sache direkt als Antwort auf Ihre Anfrage ist. Ich würde lieber eine id Variable oder etwas in die laufende Anfrage setzen, und vielleicht den Klienten bitten, das id in die Antwort auch zu setzen. Das kann erfordern, dass sowohl der Sender als auch der Empfänger den Wert der ID kennen (wahrscheinlich in der Datenbank speichern?)

Auch scheint es nicht logisch zu sein, blockiert zu werden und auf die Antwort von Websocket zu warten.