Javascript 客户端可以访问套接字吗?
我知道在Phoenix Channel中,服务器可以通过套接字分配保持状态,例如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 但是,我无法确定客户是否有办法访问这些分配 我的困惑是,如果假定服务器和客户机之间的套接字连
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开始)。谢谢。而这一集正是我从哈哈中复制我的例子的地方。不过,它并没有说明我的问题。