[英]Can Phoenix call an Elixir app?
我有一个运行在节点集群(n1@127.0.0.1和n2@127.0.0.1)上的Elixir应用程序,我们称之为Myapp.Server 。
在其中,我有一个模块run(parameter) ,其目标是联系Rest Web Service来获取一些数据(parameter是要获取的数据数量),将其转换为XML,然后将其放入一个文件中,该文件将最终转移到外部FTP。
调用
Myapp.Server.run(any_number)
因此给了我预期的结果。
我才刚刚开始学习Elixir和Phoenix,但是我脑海中不断浮现着两个问题,尽管我做了很多努力,但我找不到任何提示。 (或者我可能无法清楚地理解它)
所以我的两个问题
Elixir应用程序(在节点或节点群集上运行)可以广播到Phoenix应用程序吗? (例如,让最终用户知道结果)
另一方面,
我们是否可以通过单击在不同节点上运行的Phoenix页面中的按钮来启动启动Elixir模块的请求?
可以有人指导我或给我写一篇文章吗?
问候,
皮埃尔
PS:到目前为止,我正在阅读。
Phoenix应用程序可以绝对调用其他节点上的Elixir函数(只要网络允许通信即可)。 您的Phoenix应用程序只是另一个灵丹妙药应用程序,没有什么特别的。
要在另一个节点上调用函数,请参见Process.send函数,尤其是dest
是元组的地方: {atom, node}
。 原子是另一个节点上的命名进程,而该节点是该节点的名称,在本例中为n1@127.0.0.1
。 即。 send({:SomeNamedProcess, "n1@127.0.0.1"} some_message)
GenServers还可以接受在call , cast和服务器类型中引用的{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)
)函数在另一个节点上生成即席函数。 即。 Node.spawn_link :"n1@127.0.0.1", fn -> IO.puts("Hello from #{inspect self}") end
。
您也可以选择在另一个节点上生成Elixir任务 。
选择其中一种技术实际上取决于您的确切用例。
您可能会对进程注册表感到不满意,因为它们是节点之间的另一种间接层:
https://m.alphasights.com/process-registry-in-elixir-a-practical-example-4500ee7c0dcc#.sws1ye9e9
https://medium.com/@StevenLeiva1/elixir-process-registries-a27f813d94e3#.5xvkv03k5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.