查看源代码 Phoenix.LiveView.Socket (Phoenix LiveView v0.20.17)

Phoenix 端点使用的 LiveView 套接字。

这通常直接安装在你的端点中。

socket "/live", Phoenix.LiveView.Socket,
  websocket: [connect_info: [session: @session_options]]

要共享常规 Phoenix 通道和 LiveView 进程之间的底层传输连接,请在自己的 MyAppWeb.UserSocket 模块中使用 use Phoenix.LiveView.Socket

接下来,声明你的 channel 定义以及可选的 connect/3id/1 回调以处理你的通道特定需求,然后将你自己的套接字安装到你的端点中。

socket "/live", MyAppWeb.UserSocket,
  websocket: [connect_info: [session: @session_options]]

如果需要在运行时设置会话选项,可以使用 MFA 元组。它指定的函数必须返回一个关键字列表。

socket "/live", MyAppWeb.UserSocket,
  websocket: [connect_info: [session: {__MODULE__, :runtime_opts, []}]]

# ...

def runtime_opts() do
  Keyword.put(@session_options, :domain, host())
end

概述

类型

LiveView 中的数据,存储在套接字中。

assigns 不在套接字中时返回的结构。

t()

类型

@type assigns() :: map() | assigns_not_in_socket()

LiveView 中的数据,存储在套接字中。

@opaque assigns_not_in_socket()

assigns 不在套接字中时返回的结构。

@type fingerprints() :: {nil, map()} | {binary(), map()}
@type t() :: %Phoenix.LiveView.Socket{
  assigns: assigns(),
  endpoint: module(),
  fingerprints: fingerprints(),
  host_uri: URI.t() | :not_mounted_at_router,
  id: binary(),
  parent_pid: nil | pid(),
  private: map(),
  redirected: nil | tuple(),
  root_pid: pid(),
  router: module(),
  transport_pid: pid() | nil,
  view: module()
}