use*_*168 10 elixir phoenix-framework
我有一些验证套接字:
defmodule Test.UserSocket do
use Phoenix.Socket
## Channels
channel "user:*", Test.RoomChannel
def connect(_params, socket) do
case Phoenix.Token.verify(socket, "user", _params["token"]) do
{:ok, uid} ->
{:ok, assign(socket, :user_id, uid)}
{:error, _} ->
:error
end
end
def id(_socket), do: "user:#{_socket.assigns.user_id}"
end
Run Code Online (Sandbox Code Playgroud)
并在连接套接字后命名为 user:#id
从文档中我可以发送断开连接事件
Test.Endpoint.broadcast("users_socket:" <> user.id, "disconnect", %{})
问题:如何将自定义事件发送到套接字user:#id,它应该像是对特定套接字的推送通知.
我试过Test.Endpoint.broadcast "user:1", "new:msg", %{user: "SYSTEM", body: "iex"}但它不起作用,因为我无法在套接字上听"new:msg".
从评论中复制克里斯·麦科德的回答:
您可以在您所描述的频道上执行此操作。join/3如果您已经在连接中的套接字上验证并分配了当前用户,则无需进行验证。只需检查socket.assigns.user_id用户尝试加入的房间即可。然后你向那个房间广播Endpoint.broadcast "rooms:1", "new_msg", %{user: "SYSTEM", body: "iex"}
(将答案标记为社区维基,因为如果有人决定对此进行投票,我不想要代表点。这不是我的答案:))
| 归档时间: |
|
| 查看次数: |
3074 次 |
| 最近记录: |