【发布时间】:2016-09-09 10:34:38
【问题描述】:
我正在使用标准(规范?)Phoenix chat example 来构建一些东西。但是因为我将只处理后端,所以我不想在客户端遇到与 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()
确实,Phoenix.Socket 模块中没有 t() 函数。
我哪里做错了?甚至可以创建这样的套接字,还是我注定要拥有一个 JavaScript 客户端?
【问题讨论】:
-
我不知道这是否能解决所有问题但是创建结构的正确方法不是
Foo.t()而是%Foo{},所以在这种情况下,试试%Phoenix.Socket{}?跨度> -
@Dogbert 不错!这似乎生成了一个有效的套接字。我想知道你是如何推断出正确的数据结构的,因为文档本身说
t()。您能否解释一下将这两件事都添加为答案? :-)
标签: sockets elixir phoenix-framework