"Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received" Django 频道

"Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received" Django Channels

尝试通过 websocket 连接到服务器时,我仅在 chrome 中(不是在 safari 中,也不是在 firefox 中)收到此错误: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received。 服务器接受连接,但 chrome 意外地立即将其关闭。

这是我在前端创建 websocket 连接的方式:

const websocket = new WebSocket('ws://127.0.0.1:8000/ws/', ['Token', 'user_secret_token'])

这是我的 consumers.py 的样子:

class MyConsumer(JsonWebsocketConsumer):
    def connect(self):
        self.room_group_name = 'example_room'

        # Join room group
        async_to_sync(self.channel_layer.group_add)(self.room_group_name, self.channel_name)

        self.accept()

解决方案是在服务器上调用 self.accept() 时添加我使用的 websocket 协议 (Token) 作为子协议参数。

所以这是我的消费者现在的样子:

class MyConsumer(JsonWebsocketConsumer):
    def connect(self):
        self.room_group_name = 'example_room'

        # Join room group
        async_to_sync(self.channel_layer.group_add)(self.room_group_name, self.channel_name)

        # incorrect
        # self.accept()

        # correct
        self.accept('Token')