Heroku,烧瓶和蟒蛇插座?

时间:2013-04-20 20:05:18

标签: python heroku flask

我有一个在我的计算机上运行的python脚本。它打开一个套接字并打印它收到的任何内容。这绝对有效 - 我已设法从其他计算机连接到它并发送数据。

问题是我的heroku应用程序无法连接到套接字。

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    
s.connect((daemon_socket_vars['host'], daemon_socket_vars['port']))
s.send("Hi!")
s.close()

超时后,heroku应用程序在第二行失败。当我在我的笔记本电脑或朋友的笔记本电脑上运行相同的东西时(在这两种情况下,作为服务器的python脚本在我的笔记本电脑上运行)它可以工作。有谁知道为什么heroku会有这个问题?谢谢!

1 个答案:

答案 0 :(得分:1)

在Heroku上运行时,您的服务器应绑定到环境变量PORT中指定的端口(例如7880,仅为了讨论)。不保证是80,5000,8000,8080或其他任何东西。

然而,对于外部世界,它将显示为端口80或端口443.也就是说,如果从Heroku外部连接,则您的客户端将连接到端口80.

最后一点需要注意:当从Heroku外部连接时,您的客户将通过“Heroku Routing Mesh”,其中包括80 - >某些端口“翻译”。问题是,路由网格是一个HTTP路由网格:它只接受传入的HTTP请求,并将它们(有时更改它们,如添加标题等)路由到你的dyno。

所以你不能只在Heroku上编写一个普通套接字应用程序并直接连接到它,你必须使用HTTP作为传输。