【问题标题】:How do I connect to a remote / external Phoenix app channel from another Phoenix app?如何从另一个 Phoenix 应用程序连接到远程/外部 Phoenix 应用程序频道?
【发布时间】:2015-09-24 06:21:45
【问题描述】:

我希望逐步将遗留 API 应用程序移植到 Phoenix。理想情况下,我会将应用程序的子域划分为单独的 Phoenix 应用程序,并将它们托管在不同的服务器节点上。

我希望使用 Phoenix 频道来促进应用程序之间的通信。如何将一个 Phoenix 应用连接到另一个的频道和主题?例如,我想使用 WebSocket 设置一个“jobs.foo.com”子域,例如:

socket "/ws", Jobs do
   channel "jobs:work_orders", WorkOrdersChannel
end

从另一个 Phoenix 应用程序(例如:报告)我想发布/订阅到该 Jobs 频道主题。是否建议在 Reports 中创建 Phoenix.Endpoint Jobs 库,并在 config.exs 中配置 Jobs.Endpoint url?然后我可以使用 Phoenix.PubSub.subscribe/4 之类的东西和那个命名的 pubsub 端点吗?

我不确定我的想法是否合理。如果有更可取的方法,我愿意接受建议。

-- 编辑--

只是为了澄清我想要完成的工作......我想让一个 Phoenix 应用程序通过 WebSocket 客户端连接到另一个应用程序。这将允许我拥有具有不同领域逻辑的应用程序,通过事件通过渠道和共同感兴趣的主题进行通信。

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    我认为您可能想查看Phoenix.PubSub - 只要您设法将节点连接到集群(或者即使没有,使用 DB 或 Redis 后端),您应该能够让它们与每个除此之外。

    【讨论】:

    • RabbitMQ 之类的东西也可能是一种选择。
    • @pawel-obrok 我查看了 Phoenix.PubSub 的指针。我仍然不清楚如何让我的 Reports Phoenix 应用程序作为客户加入/订阅远程 Jobs 应用程序“jobs:work_orders”频道。我可以在集群中使用 Node.connect 连接我的应用程序,但这比我希望的更紧密地结合了不同的关注领域。 JS客户端使用new Socket("SOME_LOCATION").connect()建立连接,然后加入频道。我正在寻找 Elixir / Phoenix 的某种等效内部。
    • PubSub 不用于订阅现有频道。相反,它是一种单独的通信机制,有自己的主题供您订阅/发布。
    【解决方案2】:

    好的,我找到了一种在我的各种 Phoenix 应用程序中创建 WebSocket 客户端并允许应用程序通过远程通道和主题进行通信的方法。我的线索来自:

    channel_test.exs

    websocket_client.exs

    我基本上将websocket_client.exs 代码复制到我的应用程序的../lib 目录中,然后加载并为其添加别名。之后,我可以将一个应用程序连接到另一个应用程序的远程套接字,就像在 channel_test.exs 中完成的那样。我在两台不同的机器上运行了两个独立的 Phoenix 应用程序,并且能够跨渠道发送和接收消息。

    不要忘记将 {:websocket_client, github: "jeremyong/websocket_client"} 添加到您的 mix.exs 依赖项中。

    【讨论】:

      猜你喜欢
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 2020-01-05
      • 2018-10-02
      • 1970-01-01
      • 2016-11-13
      • 2018-11-05
      相关资源
      最近更新 更多