存在不接听用户请假事件?

时间:2018-12-31 10:29:56

标签: websocket elixir phoenix-framework

我需要在用户离开频道时执行一些操作(在大多数情况下,他们会自愿关闭选项卡,但可能还会出现连接丢失/超时等情况)

根据诸如https://elixirforum.com/t/phoenix-presence-run-some-code-when-user-leaves-the-channel/17739How to detect if a user left a Phoenix channel due to a network disconnect?之类的帖子,拦截来自"presence_diff"的{​​{1}}事件似乎是一种万无一失的方法,因为它还应涵盖以下情况:连接异常终止。

奇怪的是,Presence事件似乎仅在我通过presence_diff跟踪用户时才触发,而在用户离开时却没有触发。

同时,在我的频道中添加一个Presence.track回调会正确地捕获请假事件。

我想知道我的配置有什么问题。还是我不正确理解在线状态的使用?

示例代码:

terminate(reason, socket)

1 个答案:

答案 0 :(得分:0)

好的,我想我知道发生了什么:顾名思义,每个"participant:" <> participant_id主题仅由一个参与者订阅。因此,当该参与者退出时,该过程也将消失,并且任何人都无法对presence_diff消息采取行动。

仍然需要一个单独的过程。可以从该过程中调用MyApp.Endpoint.subscribe来订阅"participant:" <> participant_id主题并根据presence_diff消息采取行动。

或者可以设置一台外接显示器。参见How to detect if a user left a Phoenix channel due to a network disconnect?