Как принять расширение WebSocket в Django каналах? - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь добавить поддержку сжатия для моего django-channels потребителя, используя расширения WebSocket.

from channels.generic.websocket import WebsocketConsumer

class MyConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()

    def receive(self, text_data=None, bytes_data=None):
        self.send(text_data="Hello world!")

Проблема в том, что я не могу найти способ сообщить клиенту, что расширение сжатия было принято.

Если клиент предоставляет заголовок 'Sec-WebSocket-Extensions: permessage-deflate', сервер должен ответить тем же заголовком, однако кажется, что django-channels не может предоставить его, потому что accept() реализация выглядит следующим образом: :

def accept(self, subprotocol=None):
    """
    Accepts an incoming socket
    """
    super().send({"type": "websocket.accept", "subprotocol": subprotocol})

Думаю, один из вариантов - использовать начало HTTP-ответа для добавления заголовков в ответ, но я не уверен, правильный ли это путь.

Обновление: Я обнаружил, что по спецификации asgiref сообщения типа websocket.accept могут иметь раздел headers. Итак, принятые расширения должны быть переданы в этот раздел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...