Javascript 客户端可以访问套接字吗?

Javascript 客户端可以访问套接字吗?,javascript,websocket,elixir,phoenix-framework,channel,Javascript,Websocket,Elixir,Phoenix Framework,Channel,我知道在Phoenix Channel中,服务器可以通过套接字分配保持状态,例如 def join("room:lobby", payload, socket) do socket = socket |> assign(:message, Enum.random(@messages)) |> assign(:albums, []) {:ok, socket} end 但是,我无法确定客户是否有办法访问这些分配 我的困惑是,如果假定服务器和客户机之间的套接字连

我知道在Phoenix Channel中,服务器可以通过套接字分配保持状态,例如

def join("room:lobby", payload, socket) do
  socket = socket
    |> assign(:message, Enum.random(@messages))
    |> assign(:albums, [])
  {:ok, socket}
end
但是,我无法确定客户是否有办法访问这些分配

我的困惑是,如果假定服务器和客户机之间的套接字连接一直保持到终止,那么客户机不应该也能够访问该连接中的内容吗

或者所有这些分配都只保存在服务器端进程中,因此客户端无法访问,即使客户端以某种方式与服务器保持连接

如果是这样的话,服务器似乎必须显式地向客户机广播它存储的任何分配,如果它愿意的话

我的困惑是,如果假定保持套接字连接 在服务器和客户端之间,直到它终止,不是吗 客户端是否也能够访问此连接中的内容

赋值
只是结构中的一个键:

defmodule Phoenix.Socket
  ...
  ...
  defstruct assigns: %{},
            channel: nil,
            channel_pid: nil,
            endpoint: nil,
            handler: nil,
            id: nil,
            joined: false,
            join_ref: nil,
            private: %{},
            pubsub_server: nil,
            ref: nil,
            serializer: nil,
            topic: nil,
            transport: nil,
            transport_pid: nil

该结构不在连接中。相反,结构是一个草稿行,服务器使用它来存储关于特定连接的相关信息。根据报告:

要开始通信,客户端连接到节点(Phoenix服务器) 使用传输(如WebSocket或长轮询)并连接一个或多个 使用单一网络连接的更多频道。单通道服务器 每个客户机、每个主题创建流程选择合适的套接字 处理程序为通道服务器初始化%Phoenix.Socket(可能是 验证客户端后)。然后,通道服务器将保持 %Phoenix.Socket{}并可以在其内部维护所需的任何状态 socket.assigns

一旦建立了连接,来自 客户端根据其主题路由到正确的通道服务器。 如果频道服务器请求广播消息,则该消息为 发送到本地PubSub,后者将其发送到任何连接的客户端 到同一服务器并订阅该主题

--

似乎服务器必须显式地向客户机广播任何内容 指定它已存储的,如果它想


您可以查看服务器如何在此过程中使用分配(从4:15开始)。

谢谢。而这一集正是我从哈哈中复制我的例子的地方。不过,它并没有说明我的问题。