5

在我的基础设施中,我有一组 RPi 设备通过 websocket 连接到我们的网络服务器。理想情况下,websocket 连接永久保持打开状态,并充当服务器可以将信息向下推送到 RPi 设备的管道,而 RPi 可以将信息发送回服务器。

当 RPi 设备连接到 Channels 时,它会根据连接有效负载中的配置加入特定组。服务器不需要知道连接了哪些设备,因为它使用相同的启发式算法来确定组名,以便将信息发送到适当的设备(如果它们存在)。

我被摧毁的地方是频道中的 group_expiry 时间设置为 24 小时。此外,websocket 超时也设置为 24 小时。我可以处理 websocket 超时,因为 JavaScript 代码会根据需要自动尝试重新连接。但是,当组在 24 小时后过期时,我的设备将停止接收该组的通信。

最终效果是每 24 小时,我必须让 Daphne 弹跳,以便重置和重新创建所有组。整整 24 小时后,Channels 清除了这些组,一切都再次陷入停顿。

我看过这个问题线程:https ://github.com/django/channels/issues/999 。我考虑过将超时调整得更高,但我不知道这是否会对基础设施的任何其他部分产生不利影响。组将始终受到控制,所以我不相信我真的从 group_expiry 为我做的家务中受益。

找到一种方法来禁用组到期是否有任何不利影响?是否有我应该利用的不同架构方法,例如,将日期连接到组名称并使用当前日期自动创建组和成员资格,以便组可以在不中断通信的情况下过期?(这个人为的例子无疑是愚蠢的)。我想我正在寻找建筑方面的建议。

也许我什至完全走错了路。我想我应该首先通过弄清楚如何将其更改为 2 小时并查看站点是否关闭来证明确实是组到期超时正在杀死我。

这是讨论 group_expiry 设置的包: https ://github.com/django/channels_redis

4

0 回答 0