【问题标题】:Heroku, flask, and python sockets?Heroku、flask 和 python 套接字?
【发布时间】:2013-04-14 00:40:21
【问题描述】:

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

【问题讨论】:

  • IIRC,Heroku 只允许从端口 80 和 443 进行外部连接。
  • 在另一台机器上测试时,你是否使用了相同的脚本?
  • 是否应该限制它可以连接的端口会影响它可以连接的端口?我笔记本电脑上的套接字正在侦听端口 50000。我没有指定 heroku 应用程序应该使用哪个端口。所有机器上的python脚本都是一样的。

标签: python heroku flask


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2013-05-04
    • 2020-03-17
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多