Background
我正在尝试使用gevent wsgiserver提供烧瓶REST API。它在Werkzeug中工作,但在gevent wsgiserver中没有响应。这是一个由gevent wsgiserver提供的简单烧瓶应用程序。
import gevent
from gevent.pywsgi import WSGIServer
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET'])
def index_get():
return 'OK'
if __name__ == '__main__':
# app.run(host='0.0.0.0',port=80, threaded=True, debug=False)
WSGIServer(('0.0.0.0', 80), app).serve_forever()
调查
蟒蛇-3.5.2
烧瓶-0.11.1
gevent-1.2.1
浏览器不断加载响应。但是,服务器控制台显示它已经给出了响应。不小心,我更改了代码
@app.route('/', methods=['GET'])
def index_get():
return 'Worked'
并且浏览器成功收到响应。我发现只有当响应字符串是一个或两个字符串时,它才无法响应。
问题
任何人都可以确认这个问题吗?
其中的机制是什么?
如何解决方法,以便响应两个字符串?
好的,我真的应该先阅读教程。
根据教程The stream is closed when a size zero chunk is sent.
我应该附加一个零大小的块,例如'n'
@app.route('/', methods=['GET'])
def index_get():
return json.dumps({'ReturnCode':200,'message':'command sent.'}) + 'n'
看起来gevent的WSGIServer与Werkzeug略有不同。我应该做一些改变以适应它。推荐的应用与烧瓶不同。虽然,只是附加一个'n'
也对我有用。
from gevent.wsgi import WSGIServer
def application(environ, start_response):
status = '200 OK'
body = '<p>Hello World</p>'
headers = [
('Content-Type', 'text/html')
]
start_response(status, headers)
return [body]
WSGIServer(('', 8000), application).serve_forever()