【问题标题】:How to include and execute Go from within an Elixir Phoenix application如何在 Elixir Phoenix 应用程序中包含和执行 Go
【发布时间】:2019-11-27 00:26:51
【问题描述】:

我想在 Elixir Phoenix 应用程序中执行一些性能要求很高的任务。我不想将数据发送到其他地方(外部服务)、处理它并将其返回到 Phoenix 应用程序,我想就地处理它。 Go 有很多数据科学包,所以我想在 Phoenix 应用程序中使用它们。我该怎么做?

我研究并发现了使用 NIF 的 Rustler (Rust)。我找不到 Go 变体或类似版本。

【问题讨论】:

    标签: go elixir interop phoenix-framework rpc


    【解决方案1】:

    使用System.cmd/3 生成外部Go 进程。

    坦率地说,我怀疑是否有任何可用的 Go 本地绑定。

    【讨论】:

      【解决方案2】:

      如果可以,请不要使用 NIF,因为此类代码中的恐慌会导致整个 VM 崩溃。而是BEAM has few different options for FFI:

      • 恕我直言,最简单的一个 - Ports 简单来说就是运行外部进程,您可以通过 STDIO 进行通信
      • erl_interface 是端口,但带有一些用于简化通信的实用程序
      • Port Drivers 又是端口,具有更多定义的 API
      • C Nodes(尽管有名字,但不需要用 C 编写)是“模拟”为分布式 Erlang 节点的东西,您可以像连接到任何其他节点一样连接到该节点并通过交换消息与之通信
      • NIF 提供最小的开销,但正如前面所述,你应该非常小心,因为如果操作不当,它可能会导致整个 VM 崩溃(它可能需要你的 Cgo)

      【讨论】:

        猜你喜欢
        • 2016-11-07
        • 1970-01-01
        • 2016-10-12
        • 2017-01-04
        • 1970-01-01
        • 2016-04-09
        • 1970-01-01
        • 2016-02-13
        • 1970-01-01
        相关资源
        最近更新 更多