Heroku、Flask 和 Python sockets 是什么?

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会出现这样的问题?谢谢!


1
据我所知,Heroku仅允许来自80和443端口的外部连接。 - Blender
在另一台机器上测试时,您使用相同的脚本吗? - timss
限制它可以连接的端口是否应影响它可以连接到哪些端口?我的笔记本电脑上的套接字正在侦听端口50000。我没有指定Heroku应用程序应使用哪个端口。所有机器上的Python脚本都是相同的。 - bee
1个回答

3
当在Heroku上运行时,你的服务器应该绑定到环境变量PORT指定的端口(本次讨论中为7880)。它不一定是80、5000、8000、8080或其他任何端口。
然而,对于外界来说,这将显示为端口80或端口443。也就是说,如果从Heroku之外连接,你的客户端将连接到80端口。
最后一个警告:当从Heroku之外连接时,你的客户端将经过“Heroku路由网格”,其中包括80 ->某些端口的“翻译”。问题在于,路由网格是HTTP路由网格:它只接受传入的HTTP请求,并将它们路由(有时会修改它们,如添加标头等)到你的dyno。
因此,你不能在Heroku上编写纯套接字应用程序并直接连接到它,你必须使用HTTP作为传输方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接