我正在使用带有 Phoenix Channels 的 websocket 传输,但我正在尝试为没有Phoenix.Socket
客户端的消费者提供一个干净的 API,以便仅使用 websockets。
为简单起见,我想在用户打开会话时自动订阅各种频道。
目前我有类似的东西:
defmodule MyWeb.UserSocket do
require Logger
use Phoenix.Socket
alias Exchange.{Account, ApiKey}
channel "room:time", MyWeb.TimeChannel
channel "alpha:*", MyWeb.AlphaChannel
channel "beta:*", MyWeb.BetaChannel
def connect(%{"api-key" => _} = params, socket, connect_info) do
with %{"api-key" => api_key, "api-expires" => api_expires, "api-signature" => api_signature} <-
params,
{:ok, %ApiKey{} = key} <- ApiKey.fetch(api_key),
{:ok, %Account{} = account} <-ApiKey.authorize(...)) do
Logger.info("Authorized account #{account.account_id} via API key on websocket")
#JOIN CHANNELS HERE
{:ok, assign(socket, :account, account)}
else
{:error, e} ->
Logger.error("Websocket auth error #{inspect(e)}")
{:ok, socket}
end
end
end
我需要在“加入频道”中输入什么内容才能订阅?