Django Channels 是否会在每次使用时创建一个新的消费者?
Does Django Channels create a new consumer with every use?
我有一个消费者
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'],
}))
每次用户登录我的网站时都会调用它,它会自动调用类型为 'login' 的 websocket。我想跟踪当前登录的用户数量,但目前无论登录多少人,它仍然是 1。这让我想知道,Django 是否将消费者视为一次性使用 class?它会根据需要创建和销毁它们吗?
不同会话之间不共享变量。如果你想在多个会话中计算变量,你可能需要使用数据库或本地文件。
我有一个消费者
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'],
}))
每次用户登录我的网站时都会调用它,它会自动调用类型为 'login' 的 websocket。我想跟踪当前登录的用户数量,但目前无论登录多少人,它仍然是 1。这让我想知道,Django 是否将消费者视为一次性使用 class?它会根据需要创建和销毁它们吗?
不同会话之间不共享变量。如果你想在多个会话中计算变量,你可能需要使用数据库或本地文件。