2013-04-20 67 views
0

我有一个在我的电脑上运行的python脚本。它打开一个套接字并打印接收到的任何东西。这绝对有效 - 我已经设法从其他计算机连接到它并发送数据。Heroku,烧瓶和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会有这个问题吗?谢谢!

+0

IIRC,Heroku只允许来自端口80和443的外部连接。 – Blender 2013-04-20 20:11:58

+0

在另一台机器上测试时,是否使用了相同的脚本? – timss 2013-04-20 20:24:09

+0

应该限制它可以连接哪个端口影响它可以连接的端口_to_?我的笔记本电脑上的套接字在端口50000上侦听。我没有指定heroku应用程序应该使用哪个端口。所有机器上的python脚本都是一样的。 – bee 2013-04-20 20:53:12

回答

1

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

到了外面的世界,但是,这将显示为端口80或443。也就是说,如果从Heroku的外部连接,客户端将连接到端口80

最后一个警告:连接时从Heroku外部,你的客户将通过“Heroku路由网格”,其中包括80 - >端口“翻译”。问题是,路由网格是一个HTTP路由网格:它只接受传入的HTTP请求,并将它们(有时在改变它们之后,比如添加头文件等)路由到你的dyno。

因此,您不能只在Heroku上编写简单套接字应用程序并直接连接它,则必须使用HTTP作为传输。