django websockets无法在频道上发送消息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django websockets无法在频道上发送消息相关的知识,希望对你有一定的参考价值。
我在Django上使用Redis的Web套接字。 Django在macOS服务器上正常运行,但是我开始在Redhat Linux服务器上运行它,现在每当我通过websockets发送包时,服务器都会给我这个错误:
ERROR - server - HTTP/WS send decode error:
Cannot dispatch message on channel
u'daphne.response.fzdRCEVZkh!nqhIpaLfWb' (unknown)
注意:当我收到错误时,将正确接收包。
我找不到任何有关此错误的资源。
我跟随official instructions寻找频道。
答案
根据Andrew Godwin(频道包的开发者)的说法,如果您有一个已断开连接但未从频道组中删除的频道,则会记录此消息:
是的,那是达芙妮比以前更冗长,我需要删除它。不要担心 - 断开仍在群组中的频道后,这是完全正常的。但是,您可能希望在断开处理程序中添加Group.discard调用以阻止它。
我有同样的错误,使用channels.generic.websockets.WebsocketConsumer
的自定义impl。在disconnect
回调中清除组中的通道后,消息消失了。
基于类的使用者的简短示例:假设您在连接建立时将客户端添加到名为foo
的广播组。然后,在客户端断开连接时,从组中删除其通道:
from channels import Group
from channels.generic.websockets import JsonWebsocketConsumer
class MyConsumer(JsonWebsocketConsumer):
groupname = 'foo'
def connect(self, message, **kwargs):
# send an accept or the connection will be dropped automatically
self.message.reply_channel.send({"accept": True})
# add the channel to the broadcast group
Group(self.groupname).add(message.reply_channel)
# do the rest of logic that should happen on connection established
...
def disconnect(self, message, **kwargs):
Group(self.groupname).discard(message.reply_channel)
# do the rest of logic that should happen on disconnect
...
以上是关于django websockets无法在频道上发送消息的主要内容,如果未能解决你的问题,请参考以下文章
IOS safari 和 Chrome 阻止了我的 websocket django 频道