Я пытаюсь добавить поддержку сжатия для моего 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
. Итак, принятые расширения должны быть переданы в этот раздел.