【问题标题】:django channels with redis: messages created before websocket connection established are lost带有redis的django频道:在建立websocket连接之前创建的消息丢失
【发布时间】:2019-08-15 15:16:09
【问题描述】:

我已经设法让 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 连接的客户端来获取所有发送到该组的消息。

这有意义吗?

【问题讨论】:

    标签: django django-channels


    【解决方案1】:

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

    主要问题是如何跟踪客户端的在线状态。我使用的方法类似于this question 的答案中的方法,但它不是很可靠,但一开始也不错

    【讨论】:

    • 好的。我已经将消息存储在数据库中。我之前有一个“DIY”的 websocket 服务器,它在新客户端连接时将所有现有消息发送给它们。我将尝试找出如何使用 Channels 复制它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多