2016-12-23 4 views
0

Как ждать ответа от клиента после отправки клиенту что-то с помощью django-каналов?Ожидание websocket.receive consumer в django-channels

Group.send() Всякий раз, когда вызывается из функции send_to_client() и после получения сообщения от клиента, send_to_client() ожидает ответ от клиента, который становится принятый на websocket.receive канале.

Есть ли способ вернуть response_msg в send_to_client() функции?

Теперь я достиг 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, 
     }) 
    }) 

Так как только сообщение достигает на стороне клиента, клиент посылает ответ обратно на сервер, который будет получен с помощью функции ws_receive(message) через websocket.receive канал, который определен в файле urls.py,

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

Есть ли способ сделать это, чтобы моя функция выглядела так?

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

ответ

2

Поскольку вы ПОЛУЧАТЬ через WebSocket, я не уверен, если вы могли бы даже сказать, если ПОЛУЧАТЬ вещь непосредственно в ответ на ваш запрос. Я предпочел бы добавить переменную id или что-то в текущем запросе и, возможно, попросить клиента поставить этот ответ id в ответ. Это может потребовать, чтобы и отправитель, и приемник знали значение id (возможно, хранилище в db?)

Также не представляется логичным блокировать ожидание ответа от websocket.