带有redis的Django通道:在建立websocket连接之前创建的消息丢失

时间:2019-03-25 11:30:22

标签: django django-channels

我设法使django使用通道将消息发送到浏览器websocket客户端。但是我不太了解。

我的Celery后台任务在未显示来自浏览器的websocket握手之前创建的消息。

消息与

一起发送
async_to_sync(channel_layer.group_send)(str(job.id),..)

Django v 2.1.7。

通道层使用redis,因此group_send来自channels_redis,第一个参数是组ID。我希望有一个与job.id连接的客户端将所有消息发送到该组。

这有意义吗?

1 个答案:

答案 0 :(得分:0)

正在发送的消息不会等待未知的将来的客户端/连接,因此您必须自己实现该机制。您应该在发送消息之前检查客户端是否已连接,在这种情况下,您应该将消息存储在某个表中,并在以后连接时将其发送给客户端。

主要问题是如何跟踪客户端的联机状态。我使用的方法与this question的答案中的方法类似,但是这种方法不是很可靠,但是对于开始来说还不错