如何使用IP地址从Heroku中的客户端连接服务器

时间:2017-06-27 08:24:50

标签: python heroku

我正在使用heroku开发一个应用程序,但在一个问题上挣扎。 在这个应用程序中,我有2个dynos(一个用于服务器,另一个用于客户端)。 由于我想从服务器获取一些数据,我的客户端需要知道服务器的IP地址(dyno)。 现在我正在尝试使用Fixie和QuotaGuard Static, 他们告诉我一个IP地址,但我无法使用这些IP地址连接到服务器。

你能告诉我如何解决它吗?

1 个答案:

答案 0 :(得分:0)

您希望两个dynos通过套接字连接直接通信。不幸的是,你不能轻易做到这一点;这与Heroku和12因素应用程序设计(http://12factor.net)的精神背道而驰,它规定了进程应该相互隔离,并且通过“网络附加服务”进行通信。第二点可能看起来像一个细微差别,但它会影响dynos如何发现其他服务(通过注入的环境变量)。

造成这种限制的原因有很多,其中最重要的原因是“dynos”作为一个计算单元,可以在应用程序的生命周期中多次扩展,迁移到不同的物理服务器等。试图可靠地连接到dyno上的套接字实际上会变得非常复杂(如果多个正在运行则选择正确的一个,在缩放/迁移事件之后重新协商连接等)。请记住 - 即使你永远不会打电话给heroku ps:scale client=2,Heroku也不会知道这一点,而且作为一个平台,它的目的是假设你会这样做。

解决方案是使用像Redis这样的中间服务来通过Python RQ或类似的框架来促进进程间通信。

或者,将两个dynos视为单独的应用程序 - 然后您可以使用该应用程序的公共DNS条目通过HTTP从一个dynos连接到另一个。注意 - 在这种情况下,如果需要,仍然可以共享数据库。

希望有所帮助。