Elixir Phoenix Presence通过交替元模式跨多个通道跟踪用户

Elixir Phoenix Presence通过交替元模式跨多个通道跟踪用户,elixir,phoenix-framework,user-presence,Elixir,Phoenix Framework,User Presence,我正在构建一个whatsapp克隆,但我很难找到一些关于存在的东西 我有两个频道: channel "chats:*", Typi.ChatChannel channel "users:*", Typi.UserChannel 用户始终连接到用户:…频道,如果他在应用程序中,在加入时,我开始跟踪他的状态: def join("users:" <> user_id, _payload, socket) do send self(), :after_join

我正在构建一个whatsapp克隆,但我很难找到一些关于存在的东西

我有两个频道:

  channel "chats:*", Typi.ChatChannel
  channel "users:*", Typi.UserChannel
用户始终连接到
用户:…
频道,如果他在应用程序中,在加入时,我开始跟踪他的状态:

  def join("users:" <> user_id, _payload, socket) do
    send self(), :after_join
    {:ok, socket}
  end

  def handle_info(:after_join, socket) do
    Presence.track(socket, socket.assigns.current_user.id, %{})
    {:noreply, socket}
  end
当用户离开聊天室时,我想删除元信息,但保持状态。我该怎么做


谢谢

实际上它是开箱即用的,下面的测试显示了这一点:

  test "presence test", %{socket: socket, users: [john], chat: chat} do
    {:ok, _, user_socket} = subscribe_and_join(socket, "users:#{john.id}", %{})
    IO.inspect Presence.list(user_socket)
    {:ok, _, chat_socket} = subscribe_and_join(socket, "chats:#{chat.id}", %{})
    IO.inspect Presence.list(chat_socket)
    IO.inspect Presence.list(user_socket)
  end
测试的输出为:

%{"7939" => %{metas: [%{phx_ref: "UZDsMseg3as="}]}}
%{"7939" => %{metas: [%{chat_id: 1392, phx_ref: "sRhw30CJY1U="}]}}
%{"7939" => %{metas: [%{phx_ref: "UZDsMseg3as="}]}}
另外
Presence.list(chat_socket)==Presence.list(“chats:{chat.id}”)

%{"7939" => %{metas: [%{phx_ref: "UZDsMseg3as="}]}}
%{"7939" => %{metas: [%{chat_id: 1392, phx_ref: "sRhw30CJY1U="}]}}
%{"7939" => %{metas: [%{phx_ref: "UZDsMseg3as="}]}}