connect 和 disconnect 事件是从不同的 Erlang 进程独立发出来的,为了优先处理 重连,通常情况下 重连的 connected 事件会先于就连接的disconnected 事件。
想要通过这些事件来在外部重建客户端在线/离线状态的话,有2个方案可以考虑:
- 过滤掉 reason = takenover 或者 reason = discarded 的 disonnect 事件。
- 判断 connected_at 和 disconnected_at 时间戳,在最新的 5.10.4 和 6.0.3, 6.1.1 以及后续版本中,重连情况下,即使是 disconnected 事件在connected事件后发出,disconnected_at 也会总是比 connected_at 要早。