3

我有一个在我的计算机上运行的 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会遇到这个问题?谢谢!

4

1 回答 1

3

在 Heroku 上运行时,您的服务器应该绑定到环境变量 PORT 中指定的端口(比如 7880,只是为了讨论这个问题)。不保证为 80、5000、8000、8080 或其他任何值。

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

最后一个警告:当从 Heroku 外部连接时,您的客户端将通过“Heroku Routing Mesh”,其中包括 80-->something 端口“翻译”。问题是,路由网格是一个 HTTP 路由网格:它只会接受传入的 HTTP 请求,并将它们路由(有时会更改它们,例如添加标头等)到您的测功机。

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

于 2013-04-22T05:58:49.717 回答