【发布时间】:2021-10-11 20:35:09
【问题描述】:
我有一个项目,其中一个客户注册一个请求,而其他一些客户必须回答是否要与他实时合作,问题是我如何让他的消费者睡到等到其中一个公认 如果我使用 time.sleep() 整个项目将休眠
class ConsulationConsumer(WebsocketConsumer):
def connet(self):
pass
def diconnect(self,code_close):
pass
def receive(self, text_data):
text_data_json = json.loads(text_data)
consultation = text_data_json['message']
consulator=ConsultationOrder.objects.get(id=consultation).lawyer
if(consulator==None):
consulator=0
self.send(text_data=json.dumps({
'message': consulator
}))
【问题讨论】:
-
为什么不使用
AsyncWebsocketConsumer? -
您正在查看某种通知机制而不是睡眠。您可以使用 RabbitMQ 之类的队列,并让客户端在队列上发布消息(如果它想要工作)。不将此添加为答案,因为它不是问题的直接答案,而是解决问题的更好方法
-
坦率地说,我不认为你的方法是最好的。为什么你需要使用 sleep 来等待某人接受。您可以让连接保持打开状态,然后在有人接受后通过 websocket 向用户发送消息。以下文档可能对 channels.readthedocs.io/en/latest/topics/… 有所帮助您可以使用
channel_layer.send并传递该用户的频道名称向正在等待答案的用户发送消息 -
问题是我想轮流问人,每个人只有1分钟接受或忽略一分钟后他不能接受,下一个必须选择这就是为什么我想使用sleep 更改候选者。
-
非常感谢 @shoaib30 的出色指导,我使用 celery 解决问题,效果非常好
标签: python django django-channels channels