Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku、flask和python套接字?_Python_Heroku_Flask - Fatal编程技术网

Heroku、flask和python套接字?

Heroku、flask和python套接字?,python,heroku,flask,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() her

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

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

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

最后一个警告:当从Heroku外部连接时,您的客户机将通过“Heroku路由网格”,该网格除其他外还执行80-->某物端口“转换”。问题是,路由网格是一个HTTP路由网格:它只接受传入的HTTP请求,并将它们路由到您的dyno(有时会修改它们,比如添加头等)


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

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