Gevent WSGIServer 不响应

Gevent WSGIServer don't respond

背景

我正在尝试使用 gevent wsgiserver 为 flask REST API 提供服务。它在 Werkzeug 中工作,但在 gevent wsgiserver 中没有响应。这是由 gevent wsgiserver 提供的一个简单的 flask 应用程序。

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()

调查

Python-3.5.2
flask-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()