查看源代码 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/3
和 id/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
概述
类型
@type assigns() :: map() | assigns_not_in_socket()
LiveView 中的数据,存储在套接字中。
@opaque assigns_not_in_socket()
当 assigns
不在套接字中时返回的结构。
@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() }