Python 烧瓶作为代理不';当部署到龙卷风中时无法工作
我编写了一个flask应用程序作为代理,分析通过它的数据,并提供一个网页,在那里我可以得到结果。使用flask附带的默认开发服务器时,一切似乎都进行得很顺利,比如使用:Python 烧瓶作为代理不';当部署到龙卷风中时无法工作,python,proxy,flask,tornado,Python,Proxy,Flask,Tornado,我编写了一个flask应用程序作为代理,分析通过它的数据,并提供一个网页,在那里我可以得到结果。使用flask附带的默认开发服务器时,一切似乎都进行得很顺利,比如使用: app.run() 但当我尝试将应用程序部署到服务器时,例如tornado或Python标准库中的wsgiref.simple_服务器,使用: from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPServer from tornad
app.run()
但当我尝试将应用程序部署到服务器时,例如tornado或Python标准库中的wsgiref.simple_服务器,使用:
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from app import app
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
或
这两种方法会导致在之前得到200 OK的请求上出现404错误
我的应用程序收到的请求,因为它作为代理,在请求行中有绝对URL,如POSThttp://example.com/test HTTP/1.1
。当我使用开发服务器时,此请求通常由在/test
下注册的函数处理,类似于:
@app.route('/test', methods=['GET', 'POST'])
def handle_test():
...
正如我所检查的,request.url
,是http://example.com/test
当使用其他两种方法时,请求由代码为404的错误处理程序处理,并且永远不会调用handle\u test()
函数。导致问题的request.url
,是http://example.com/http://example.com/test
,绝对不是我想要的
所以我想知道:
谢谢 Tornado目前不支持代理式请求;看 Tornado的WSGIContainer对于代理来说也是一个糟糕的选择,因为它的单线程并发模型(请参阅)。即使前面提到的bug已经修复,您的代理也会表现不佳。我建议要么使用多线程WSGI服务器(如gunicorn或uwsgi,尽管我不知道它们是否支持代理风格的请求),要么将代理重写为本机Tornado应用程序(不带flask),以利用异步功能
@app.route('/test', methods=['GET', 'POST'])
def handle_test():
...