首页 文章

凤凰城可以拨打Elixir应用吗?

提问于
浏览 553
2

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

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

调用

Myapp.Server.run(any_number)

因此给了我预期的结果 .

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

所以我的两个问题,

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

在另一方面,

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

可以请某人指导我或给我一篇文章吗?

问候,

皮埃尔

PS:到目前为止我在读什么 .

  • Dave Thomas编程Elixir 1.2

  • 由Chris McCord,Bruce Tate和JoséValim编写凤凰剧

  • 来自EMSON先生的Udemy / Elixir介绍

1 回答

  • 0

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

    要在另一个节点上调用函数,请参阅Process.send函数,特别是 dest 是元组的位置: {atom, node} . atom是另一个节点上的命名进程,节点是节点的名称,在您的情况下是 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

相关问题