如何在Django频道中接受WebSocket扩展?

时间:2020-06-16 17:33:19

标签: django django-channels

我正在尝试使用WebSocket扩展为我的django-channels使用者添加压缩支持。

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()实现{ 3}}:

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

我猜一个选择是使用is as follows向响应中添加标头,但是我不确定这是否是正确的路径。

更新:我发现,websocket.accept类型的HTTP response start条消息可以具有headers部分。因此,应在本节中传递可接受的扩展。

0 个答案:

没有答案