Длинные опросы HTTP Django Channels 2.x - PullRequest
0 голосов
/ 26 мая 2019

Я новичок в каналах Django, пытающихся реализовать HTTP Long Polling.

Я попробовал задокументированный пример здесь , но, похоже, он не работает.

class LongPollConsumer(AsyncHttpConsumer):
  async def handle(self, body):
    self.room_name = self.scope['url_route']['kwargs']['uuid']
    self.room_group_name = 'upvote_'    
    # await self.send_response(200, b"Hello", headers=[
    #     (b"Content-Type", b"application/json"),
    # ])
    await self.send_headers(headers=[
        (b"Content-Type", b"application/json"),
    ])
    print('consumer room_name', self.room_group_name)
    async_to_sync(self.channel_layer.group_add)(
        self.room_group_name,
        self.channel_name
    )

    # Headers are only sent after the first body event.
    # Set "more_body" to tell the interface server to not
    # finish the response yet:
    await self.send_body(b"i", more_body=True)


  async def upvote_message(self, event):
    # Send JSON and finish the response:
    # async_to_sync(self.channel_layer.group_discard)(
    #     self.room_group_name,
    #     self.channel_name
    # )
    print('inside....upvote_message')
    await self.send_body(json.dumps(event).encode("utf-8"))

и из моего views.py я звоню:

room_group_name = 'upvote_'
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
    room_group_name, {
        "type": "upvote.message",
        "message": {
            'actionType': 'WS_NEW_EVENT_RECEIVED',
            'data': {}
        }
    }
)

Он печатает consumer room_name upvote_, как только запрос отправлен, и запрос все еще открыт, что и должно быть, но ответ абсолютно ничего. Я использую Почтальон для проверки конечной точки длинного опроса.

Мои вопросы:

  • Является ли тип в views.py правильным? Я также попробовал upvote_message, что, похоже, тоже не работает.

  • Как закрыть соединение с сервера, отправив пустой ответ при достижении максимального времени ожидания?

  • Правильно ли я тестирую конечную точку длинного опроса? Если нет, пожалуйста, кратко опишите в ответе, как это сделать.

...