【问题标题】:Heroku Node.js + PythonHeroku Node.js + Python
【发布时间】:2012-11-21 17:31:10
【问题描述】:

我正在尝试构建一个同时具有 Python 部分和 Node.js 部分的网络应用程序。 Python 部分是一个 RESTful API 服务器,Node.js 将使用 sockets.io 并充当推送服务器。两者都需要访问同一个数据库实例(在我的例子中是 Heroku Postgres)。 Python 部分需要与 Node.js 部分通信,以便发送推送消息以传递给客户端。

我已经构建和部署了 Python 和 DB 部分,在“网络”测功机下运行。我不确定如何构建 Node 部分——尤其是 Python 部分如何与 Node.js 部分对话。

我假设 Node.js 需要成为一个新的 Heroku 应用程序,以便它也可以在“网络”测功机上运行,​​这样它就可以从 HTTP 路由堆栈中受益,并且客户端可以连接到它。在这种情况下,我的 Python dynos 会像普通客户端一样访问它吗?

有哪些选择?这通常是怎么做的?

【问题讨论】:

  • 这是另一种方法,所以我只是将其作为评论发布。我刚刚看完 PyCon 2012 上的精彩 IPython video。在其中,Fernando 提到他们正在使用 tornado 和 0MQ 来创建一个非常松散耦合的客户端/代理/服务器环境。 Tornado 是一个用 Python 编写的异步服务器平台(如 node.js)。我刚刚进入0MQ docs,这很有趣。您可能希望将 tornado 视为 node.js 的 Python 替代品。
  • 我实际上已经听说过它,这是有道理的,但我对此有一些普遍的问题:(1)它没有回答我关于 Heroku dynos 如何相互交谈的问题,并且我是否需要一个新的 Heroku 应用程序 (2) Heroku dynos 可以使用 0MQ 与 e/o 通话吗? (3) 它将我的推送服务器逻辑和我的 API 逻辑,这是相当不同的项目,耦合到一个项目中,以便我可以将它们放在一个测功机上; (4) 因此,它让我编写了我的 API 异步风格,而编写它同步可以更简单和易于管理,特别是如果我使用 gevents/gunicorn。
  • 全部正确。正如我所说,这就是我发表评论的原因。
  • 是的,我在一条类似的船上 Nitzan - 有一个 REST API (python tornado) 和一个节点 web 客户端。目前正在尝试在 Heroku 上发布 REST API,以便我可以通过 url 访问该服务。在本地它会在端口 8080 上侦听,但我认为它与 Heroku 的映射不太好:-(
  • 你想监听端口$PORT(环境变量),当你从你的node.js应用程序访问它时,你会使用常规端口80,heroku http路由器将映射到右边您的实例的端口。这是一个与我所面临的完全不同的问题,但我希望这仍然会有所帮助。

标签: python node.js heroku cedar


【解决方案1】:

玩了一会儿,也做了一些阅读,似乎需要这个的 Heroku 应用有两个主要选项:

1) 使用某种后端,两个应用程序都可以与之通信。例如 DB、Redis、0mq 等。

2) 使用我上面的建议。我实际上继续实施了它,并且它有效。

只是想我会分享我的发现。

【讨论】:

  • 嗨,Nitzan,你能分享你的代码吗 - 只需一个管理摘要就可以了 :-)
  • 不确定什么是“代码管理摘要”,让我试试看:两者都是“常规”Heroku 应用程序,都只有“网络”测功机。 API 应用程序的代码使用一个秘密令牌来验证它是否只接收来自我的其他应用程序的请求(因为它的 http 接口对整个世界都是开放的)。令牌是两个应用程序环境设置的一部分,因此只有我可见。
猜你喜欢
  • 2017-02-15
  • 2013-03-16
  • 2021-06-08
  • 2019-01-03
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2012-07-25
相关资源
最近更新 更多