在我的基础设施中,我有一组 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