我正在使用标准(规范?) 凤凰聊天实例来构建一些东西。但是,因为我只处理后端,所以我不想在客户端遇到与JavaScript搏斗的麻烦。我想测试我的房间创建和广播超过3-4终端会议,这将作为用户。
所以我马上就尝试了:
iex(2)> Rtc.RoomChannel.join("rooms:gossip", "hey!", {})
{:ok, {}}嗯,真奇怪。我应该把插座拿回来的。等一下!愚蠢的我,我刚刚通过一个空的元组,而不是一个插座,并得到了它。这意味着我只需要传递一个有效的套接字作为第三个参数。太酷了!。。
但是如何得到插座呢?然后,我记得在通道目录中有一个名为user_socket的东西,所以我尝试了这样的方法:
iex(5)> h MyApp.UserSocket.connect
@callback connect(params :: map(), Phoenix.Socket.t()) :: {:ok, Phoenix.Socket.t()} | :error 啊哈!现在我知道如何创建套接字了。因此,让我们创建一个:
iex(6)> MyApp.UserSocket.connect(%{}, Phoenix.Socket.t())
** (UndefinedFunctionError) undefined function Phoenix.Socket.t/0
(phoenix) Phoenix.Socket.t()实际上,在t()模块中没有Phoenix.Socket函数。
我哪里出错了?是否有可能创建这样的套接字,或者我注定要有一个JavaScript客户端?
发布于 2016-09-09 02:34:38
您应该看看Phoenix.Socket module.This是如何定义connect/2回调的:
...
alias Phoenix.Socket
@callback connect(params :: map, Socket.t) :: {:ok, Socket.t} | :error
...
@type t :: %Socket{id: nil,
assigns: %{},
channel: atom,
channel_pid: pid,
endpoint: atom,
handler: atom,
joined: boolean,
pubsub_server: atom,
ref: term,
topic: String.t,
transport: atom,
transport_name: atom,
serializer: atom,
transport_pid: pid}典型果胶
远程类型 任何模块都可以定义自己的类型,而Elixir中的模块也不例外。例如,Range模块定义了一个表示范围的t类型:这种类型可以称为Range.t。以类似的方式,字符串是String.t,任何可枚举的字符串都可以是Enum.t,依此类推。
https://stackoverflow.com/questions/39396435
复制相似问题