【问题标题】:Testing Phoenix channels (for chat) over iex通过 iex 测试 Phoenix 频道(用于聊天)
【发布时间】: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


【解决方案1】:

你应该看看Phoenix.Socket模块。这是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}

Typespecs

远程类型

任何模块也可以定义自己的类型和模块 灵药也不例外。例如, Range 模块定义了一个 t 表示范围的类型:这种类型可以称为 Range.t。 以类似的方式,字符串是 String.t,任何可枚举的都可以是 Enum.t 等等。

【讨论】:

  • 啊,非常感谢。看来 Elixir 的高级功能也不容小觑!
猜你喜欢
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2011-03-17
相关资源
最近更新 更多