凤凰可以拨打Elixir应用吗?

时间:2016-08-28 14:22:42

标签: elixir phoenix-framework channel

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

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

致电

Myapp.Server.run(any_number)
因此

给了我预期的结果。

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

所以我的两个问题,

  

Elixir应用程序(在节点或节点集群上运行)   广播到凤凰城的申请? (例如,最终用户要注意结果)

另一方面,

  

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

有人可以指导我或者给我一篇文章吗?

此致

皮尔

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

  • 由Dave Thomas编写Elixir 1.2
  • Chris McCord,Bruce Tate和JoséValim对凤凰编程
  • EMSON先生的Udemy / Elixir介绍

1 个答案:

答案 0 :(得分:0)

Phoenix应用程序绝对可以在其他节点上调用Elixir函数(只要网络允许通信)。你的凤凰应用程序只是另一个elixir应用程序,没有什么特别之处。

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

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

此外,您可以使用[Node.spawn_link](例如send({:SomeNamedProcess, "n1@127.0.0.1"} some_message))函数在另一个节点上生成ad-hoc函数。即。 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