【问题标题】:Can Phoenix call an Elixir app?Phoenix 可以调用 Elixir 应用程序吗?
【发布时间】:2017-01-04 15:49:19
【问题描述】:

我有一个 Elixir 应用程序在节点集群(n1@127.0.0.1 和 n2@127.0.0.1)上运行,我们称之为 Myapp.Server

在其中,我有一个模块run(parameter),其目标是联系一个Rest Web Service来抓取一些数据(参数是要抓取的数据的数量),将其转换为XML 然后将其放入一个文件中,该文件最终将传输到外部 FTP。

打电话

Myapp.Server.run(any_number)

因此给了我预期的结果。

我刚刚开始学习灵药和凤凰,但是我的脑海中不断出现两个问题,尽管我努力了,但我找不到任何提示。 (或者我可能无法清楚地理解它)

所以我的两个问题,

Elixir 应用程序是否可以(在一个节点或节点集群上运行) 广播到 Phoenix 应用程序? (例如让最终用户知道结果)

另一方面,

我们可以通过单击运行在不同节点上的 Phoenix 页面中的按钮来发起启动 Elixir 模块的请求吗?

请有人指导我或给我一篇文章吗?

问候,

皮埃尔

PS:到目前为止我正在阅读的内容。

  • Dave Thomas 编写的 Elixir 1.2 编程
  • 由 Chris McCord、Bruce Tate 和 José Valim 编写 Phoenix)
  • EMSON 先生的 Udemy/Elixir 介绍

【问题讨论】:

  • Phoenix 应用是否运行在同一个集群的某个节点上?
  • 正在同一个集群上工作。从 n2 它给我以下信息: iex(n2@127.0.0.1)1> Node.list [:"n1@127.0.0.1", :"phoenix@127.0.0.1"]
  • “广播到 Phoenix 应用程序”是指将消息广播到 Phoenix 频道(如 stackoverflow.com/questions/33960207/…)?

标签: elixir phoenix-framework channel


【解决方案1】:

Phoenix 应用绝对可以调用其他节点上的 Elixir 函数(只要网络允许通信)。您的 Phoenix 应用程序只是另一个灵丹妙药应用程序,并没有什么特别之处。

要调用另一个节点上的函数,请参见Process.send 函数,特别是其中dest 是一个元组:{atom, node}。原子是另一个节点上的命名进程,节点是节点的名称,在您的情况下为n1@127.0.0.1。 IE。 send({:SomeNamedProcess, "n1@127.0.0.1"} some_message)

GenServers 也可以接受callcastserver type 中引用的这个{atom, node} 元组。 IE。 GenServer.call({:SomeNamedProcess, "n1@127.0.0.1"}, {:do_something, some_message}).

此外,您可以使用 [Node.spawn_link](e. send({:SomeNamedProcess, "n1@127.0.0.1"} some_message)) 函数在另一个节点上生成 ad-hoc 函数。 IE。 Node.spawn_link :"n1@127.0.0.1", fn -> IO.puts("Hello from #{inspect self}") end.

您也可以选择spawn Elixir Tasks on another node

选择其中一种技术实际上取决于您的具体用例。

您可能对进程注册表感兴趣,因为它是节点之间的另一个间接级别:

https://m.alphasights.com/process-registry-in-elixir-a-practical-example-4500ee7c0dcc#.sws1ye9e9

https://medium.com/@StevenLeiva1/elixir-process-registries-a27f813d94e3#.5xvkv03k5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2023-03-05
    • 2015-07-07
    相关资源
    最近更新 更多