Django Channels 是不是会在每次使用时创建一个新的消费者?
Posted
技术标签:
【中文标题】Django Channels 是不是会在每次使用时创建一个新的消费者?【英文标题】:Does Django Channels create a new consumer with every use?Django Channels 是否会在每次使用时创建一个新的消费者? 【发布时间】:2020-08-02 00:55:14 【问题描述】:我有一个消费者
class BingoConsumer(WebsocketConsumer):
logged_in = 0
def connect(self):
async_to_sync(self.channel_layer.group_add)(
"login", self.channel_name
)
self.accept()
def disconnect(self, close_code):
async_to_sync(self.channel_layer.group_discard)(
"login", self.channel_name
)
self.logged_in -= 1
def receive(self, text_data):
text_data = json.loads(text_data)
if text_data['type'] == 'login':
self.logged_in += 1
async_to_sync(self.channel_layer.group_send)(
"login",
'type': 'login',
'count': self.logged_in,
)
def login(self, event):
self.send(text_data=json.dumps(
'type': 'login',
'total': event['count'],
))
每次用户登录我的网站时都会调用它,它会自动调用类型为“登录”的 websocket。我想跟踪当前登录的用户数量,但是当前无论有多少人登录,它仍然是1。这让我想知道,Django是否将消费者视为单次使用类?它会根据需要创建和销毁它们吗?
【问题讨论】:
是的,确实如此。如果您想跨多个连接聚合数据,最好直接使用缓存、数据库或文件系统之类的东西来保存数据 啊,太好了,谢谢!我今天学到了一些东西:) 【参考方案1】:变量不会在不同的会话之间共享。如果要在多个会话中计算变量,可能需要使用数据库或本地文件。
【讨论】:
以上是关于Django Channels 是不是会在每次使用时创建一个新的消费者?的主要内容,如果未能解决你的问题,请参考以下文章
引入 Django Channels 时是不是需要更改我的正常 Django 代码?
Django Channels 2.4 ... WebSocket 消息是不是总是按顺序到达
Django Channels Consumer 未连接到 websocket
代码发布项目——django实现websocket(使用channels)基于channels实现群聊功能gojs插件paramiko模块