我有一个奇怪的问题。我将 Lighttpd 配置为将 /test 传递给 fastcgi 后端。刚刚在配置中添加了这个
fastcgi.server = ("/test" =>
("127.0.0.1" =>
(
"host" => "127.0.0.1",
"port" => 7101,
"docroot" => "/",
"check-local" => "disable"
)
)
)
现在,当我启动 Flup 示例并点击 127.0.0.1:80/test 时,一切正常。测试 uWSGI 到,还是可以的。
翻牌示例:
#!/usr/bin/env python
from flup.server.fcgi import WSGIServer
def myapp(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World']
WSGIServer(myapp, bindAddress = ('127.0.0.1',7101)).run()
现在,唯一的问题是当我启动 gevent 时它不起作用。Lighttpd mod_fastcgi 说后端刚刚被阻塞。
有趣的是,当我更改处理程序以仅返回字符串时,导致 WSGI 需要可迭代,并从我的浏览器中点击 127.0.0.1:7101 它按预期工作。这应该是WSGIServer,怎么会这样呢?
这是gevent代码:
#!/usr/bin/python
"""WSGI server example"""
from gevent.wsgi import WSGIServer
def app(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
#return ["Hello World", StopIteration] # this is WSGI test, not working
return "Hello World"
# when set like this, frontend :80 still wont work (500 Internal error),
# but 127.0.0.1:7101 work like standard http
if __name__ == '__main__':
WSGIServer(('', 7101), app).serve_forever()
底线是,为什么只有 gevent 在这个设置中不起作用,而 Flup 和 uWSGI 都在起作用?这里有没有官方示例中没有提到的一些秘密设置。