我有一个数据库,每秒在其中插入新数据。首次建立websockets连接时,我想使用Django通道发送所有数据。然后,我希望每秒钟进入数据库的新数据数据通过同一websocket发送。我有以下消费者。py
class DataConsumer(AsyncConsumer):
async def websocket_connect(self, event):
print("connected", event)
await self.send({
"type": "websocket.accept"
})
obj = ... send the whole db
await self.send({
'type': 'websocket.send',
'text': obj
})
while True:
await asyncio.sleep(1)
obj = ... send only new records
await self.send({
'type': 'websocket.send',
'text': obj
})
async def websocket_receive(self, event):
print("receive", event)
async def websocket_disconnect(self, event):
print("disconnected", event)
这里Django Channels - constantly send data to client from server,他们提到如果用户断开连接,循环将永远不会退出。他们提出了潜在的解决方案,但我不太了解。我该如何解决?
基本上,您要做的不是写while True:
。相反,您应该定义一个全局变量,例如is_connected
,在连接时将其设置为True
,在断开连接时将其设置为False
,并且while
条件必须使用此变量,如下所示:
class DataConsumer(AsyncConsumer):
async def websocket_connect(self, event):
print("connected", event)
await self.send({
"type": "websocket.accept"
})
obj = ... send the whole db
await self.send({
'type': 'websocket.send',
'text': obj
})
# here set is_connected to True
self.is_connected = True
while is_connected:
await asyncio.sleep(1)
obj = ... send only new records
await self.send({
'type': 'websocket.send',
'text': obj
})
async def websocket_receive(self, event):
print("receive", event)
async def websocket_disconnect(self, event):
# set is_connected to false
is_connected = False
print("disconnected", event)